lee1080/CloudflareSpeedTestDDNS

需求建议:ip-scanner/cloudflare获取到速度为0的IP时,不更新DDNS

Eddie1874 opened this issue · 4 comments

喵主子好,我有个建议,望考虑下,谢谢。

现有CloudflareSpeedTest获取IP速度为0的时候依然会写入result.csv,从而导致你代码也会更新DDNS
建议在更新DDNS的时候加一个判断,速度为0的时候不更新CF,实际上这些IP也基本上不能用的。

result.csv 结果如图,在这个取值条件上加个判断应该就可以。
IP 地址,已发送,已接收,丢包率,平均延迟,下载速度 (MB/s)
112.74.93.147,4,4,0.00,18.42,0.00

修改cf_ddns_cloudflare.sh,在以下条件上加一个前置条件,判断速度为0则不取
while [[ ${x} -lt $num ]]; do
CDNhostname=${hostname[$x]}

ipAddr=$(sed -n "$((x + 2)),1p" /root/cf_443/cf_ddns/result.csv | awk -F, '{print $1}')

好建议,等后面空了就加上。

不好意思喵主子,我试着自己改了下下,好像是可以用了,你看是否可以参考下。
cf_ddns_cloudflare.sh 97行开始,把获取CF IP前置了下,加了一个判断,目前测试应该是可以用的。

while [[ ${x} -lt $num ]]; do
CDNhostname=${hostname[$x]}
listDnsApi="https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records?type=${recordType}&name=${CDNhostname}"
createDnsApi="https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records"

proxy="false"

res=$(curl -s -X GET "$listDnsApi" -H "X-Auth-Email:$x_email" -H "X-Auth-Key:$api_key" -H "Content-Type:application/json")
recordId=$(echo "$res" | jq -r ".result[0].id")
recordIp=$(echo "$res" | jq -r ".result[0].content")
echo "现有CF的IP---$recordIp"

ipSpeed=$(sed -n "$((x + 2)),1p" /root/cf_443/cf_ddns/result.csv | awk -F, '{print $6}')

if [ $ipSpeed = "0.00" ]; then
ipAddr=$(echo "$res" | jq -r ".result[0].content")
echo "速度为0时的IP---$ipAddr"
else
ipAddr=$(sed -n "$((x + 2)),1p" /root/cf_443/cf_ddns/result.csv | awk -F, '{print $1}')
echo "速度不为0时的IP---$ipAddr"
fi

对了,由于我本身环境有问题,我把文件路径全部用的绝对路径,如果要看的话需要注意下。
/root/cf_443/cf_ddns改为./cf_ddns

晚上在op上测试了一下,延迟下限设置了30ms,运行的时候,显示下限为0,不知道其他人遇到了没?改为默认的20ms,显示正常
image