Open 1265578519 opened 1 year ago
因为测出来的ip基本不能用,甚至可以算是bug?得出的结果后,还要人工去用cmd傻乎乎的去curl确认ip可用情况太不科学了。
CloudflareST 的 HTTPing 测试,和 curl 测试原理是一样的,理论上测试结果是通的就能用,如果不能用就是其他因素影响了(例如墙/运营商的干扰,像我这边平时都不会用 HTTPing 测试 Cloudflare IPv4,因为越测越少,每次测试都有大批 IP 被干扰阻断。。。测的时候是通的,但等我手动去 TCPing 就是超时了)。
你这种需求,建议用脚本去实现,每次测速后,再次对结果进行测速筛选。
因为 Cloudflare CDN IPv4 被我这边联通干扰阻断了,因此我这边是完全用不上 -cfcolo
功能(IPv6 的话数量太多,大海捞针测速太慢,也懒得用),这也是我当初为什么一直没有添加该功能的原因,也是后来有人写好提 PR 了我才加上了,因此我也没啥动力去对 -cfcolo
功能更新完善。。。
而且该功能仅局限于 Cloudflare CDN,而我现在大都是用 CloudflareST 来测速其他 CDN、网站 IP。。。
例如获取到70个可用ip,二次筛选这70个,每个尝试10次curl,应当全部获取为同一个SEA机场代码,如果出现其它的HKG之类其它不同地域的时候则丢弃次ip不进行后续下载测速。 如果二次筛选是丢包未获取到机场代码的响应结果,应当执行排序到末尾队列还是直接丢弃啥的
@1265578519 ,我已按照功能需求修改了源代码,重点如下:
也增加了几个指标用来观察
CFColo_empty
无法获取到地区码CFColo_ignore
如果跟指定的colo 不匹配则忽略CFColo_diff
后续测试中跟[指定的地区码/首次请求到的地区码]不同CFColo_empty_after
第一次能获取到地区码,后续测试中无法获取地区码CFColo_error
无法访问该IP地址CFColo_success
成功通过测试HttpPingCount
测试总数以下是环境配置:
操作系统:Ubuntu 20.04 Go 版本:1.19.3 CPU: 1核 内存:1 GiB 带宽:1 Gbps或以上
操作系统:Mac 12.5.1 Go 版本:1.18.2 CPU:8核 内存:16 GiB 带宽:100 M
ip.txt文件如下
173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22
go run . -httping -t 10 -dd -n 5700 -tp 80 -url http://cdn.cloudflare.steamstatic.com -allip
-allip
启用全部IP测试国外机器1:Azure - 韩国
# XIU2/CloudflareSpeedTest
开始延迟测速(模式:HTTP,端口:80,平均延迟上限:9999 ms,平均延迟下限:0 ms)
路由抖动: 0 测试中无法获取地区码: 0 无法获取: 432 错误: 1450536 忽略: 0 正常: 73768 总数:1524736
国外机器2: vultr - 新加坡
# XIU2/CloudflareSpeedTest
开始延迟测速(模式:HTTP,端口:80,平均延迟上限:9999 ms,平均延迟下限:0 ms)
路由抖动: 0 测试中无法获取地区码: 0 无法获取: 2509 错误: 1191074 忽略: 0 正常: 331153 总数:1524736
国内机器:广东联通
# XIU2/CloudflareSpeedTest
开始延迟测速(模式:HTTP,端口:80,平均延迟上限:9999 ms,平均延迟下限:0 ms)
路由抖动: 0 测试中无法获取地区码: 0 无法获取: 1008 错误: 1065794 忽略: 0 正常: 457934 总数:1524736
国内机器: 广东电信
# XIU2/CloudflareSpeedTest
开始延迟测速(模式:HTTP,端口:80,平均延迟上限:9999 ms,平均延迟下限:0 ms)
路由抖动: 0 测试中无法获取地区码: 0 无法获取: 502 错误: 1422535 忽略: 0 正常: 101699 总数:1524736
可以看出来路由抖动的案例几乎为0,而且根据 Cloudflare Status 官方列出来的计划来看,几乎每个区每天都有被调整的路由
所以这功能实现起来不难,但没有看到对应的效果,如果有更好的使用场景可以考虑🤔
修改后的仓库地址: https://github.com/charSLee013/CloudflareSpeedTest 测量结果:https://github.com/charSLee013/CloudflareSpeedTest/commit/7b5c6c0eb68eb4837bf8b0d415d3e1069c86e94b
@charSLee013 有没有exe,,发我试试,感觉你写的不太对可能有bug
@1265578519 windows 版本你可以安装个golang,然后自行运行试试看,我手头上没有win机器
@echo off
git clone https://github.com/charSLee013/CloudflareSpeedTest.git
cd CloudflareSpeedTest
go run . -httping -t 10 -dd -n 5700 -tp 80 -url http://cdn.cloudflare.steamstatic.com -allip
功能需求
这个难度改起来应该不大,需求的人应该也挺多的,因为测出来的ip基本不能用,甚至可以算是bug?得出的结果后,还要人工去用cmd傻乎乎的去curl确认ip可用情况太不科学了。
通过http获得可用的机场代码测速ip后,能否二次筛选一下? 二次对每个ip测试十次,筛选可用ip。
需求,二次对ip判断丢包,和机场代码保持一致 例子
问题图,某些ip会bgp路由到两个地域,HKG和SEA,然后来回跳导致HKG出现大量丢包引物无法访问。https://github.com/XIU2/CloudflareSpeedTest/issues/280 至少我这移动宽带HKG已经残废。![image](https://user-images.githubusercontent.com/6442439/222981704-a94c9877-0883-4353-9421-2dc7dee5c0e9.png)
测试结果的时候,可能下载测速正好是SEA,然后显示43MB/s,实际用起来发现一直0KB。。。测了一下发现丢包率很高,通过curl发现路由地域来回跳动。应当二次筛选后在进行下载测速。
例如获取到70个可用ip,二次筛选这70个,每个尝试10次curl,应当全部获取为同一个SEA机场代码,如果出现其它的HKG之类其它不同地域的时候则丢弃次ip不进行后续下载测速。 如果二次筛选是丢包未获取到机场代码的响应结果,应当执行排序到末尾队列还是直接丢弃啥的。。。这个看你想啦!
目的肯定是测出最精品的ip。。。不然测出来一个速度,实际上用起来确有问题。
我使用的bat命令
预期目标
这个ip一样的效果,每次都是SEA,而且没有丢包,堪称精品