lee1080 / CloudflareSpeedTestDDNS

使用CloudflareSpeedTest工具优选IP后自动DDNS到Cloudflare
499 stars 175 forks source link

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

Open Eddie1874 opened 1 year ago

Eddie1874 commented 1 year ago

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

现有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}')

lee1080 commented 1 year ago

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

Eddie1874 commented 1 year ago

不好意思喵主子,我试着自己改了下下,好像是可以用了,你看是否可以参考下。 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

Eddie1874 commented 1 year ago

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

fsyllkn commented 1 year ago

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