XIU2 / CloudflareSpeedTest

🌩「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP !当然也支持其他 CDN / 网站 IP ~
GNU General Public License v3.0
18.24k stars 3.51k forks source link

通过http获得可用的机场代码测速ip后,能否二次筛选一下? #360

Open 1265578519 opened 1 year ago

1265578519 commented 1 year ago

功能需求

这个难度改起来应该不大,需求的人应该也挺多的,因为测出来的ip基本不能用,甚至可以算是bug?得出的结果后,还要人工去用cmd傻乎乎的去curl确认ip可用情况太不科学了。

通过http获得可用的机场代码测速ip后,能否二次筛选一下? 二次对每个ip测试十次,筛选可用ip。

需求,二次对ip判断丢包,和机场代码保持一致 例子

curl 172.67.73.30 -i

问题图,某些ip会bgp路由到两个地域,HKG和SEA,然后来回跳导致HKG出现大量丢包引物无法访问。https://github.com/XIU2/CloudflareSpeedTest/issues/280 至少我这移动宽带HKG已经残废。 image

测试结果的时候,可能下载测速正好是SEA,然后显示43MB/s,实际用起来发现一直0KB。。。测了一下发现丢包率很高,通过curl发现路由地域来回跳动。应当二次筛选后在进行下载测速。

例如获取到70个可用ip,二次筛选这70个,每个尝试10次curl,应当全部获取为同一个SEA机场代码,如果出现其它的HKG之类其它不同地域的时候则丢弃次ip不进行后续下载测速。 如果二次筛选是丢包未获取到机场代码的响应结果,应当执行排序到末尾队列还是直接丢弃啥的。。。这个看你想啦!

目的肯定是测出最精品的ip。。。不然测出来一个速度,实际上用起来确有问题。

我使用的bat命令

@echo off
title=测试cf速度
mode con cols=100 lines=54&color 2&color 5B
echo 准备测试cf延迟与速度(美国西雅图)
pause
echo cf延迟与速度测试中,预计20秒,请稍候……
CloudflareST.exe -n 300 -t 1 -httping -cfcolo SEA -url https://cdn.cloudflare.steamstatic.com/steam/apps/5952/movie_max.webm
echo 请截屏记录输出秒数数值来对比性能,越高性能越高。
pause

预期目标

这个ip一样的效果,每次都是SEA,而且没有丢包,堪称精品

curl 104.18.31.69 -i

image

XIU2 commented 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。。。

charSLee013 commented 1 year ago

例如获取到70个可用ip,二次筛选这70个,每个尝试10次curl,应当全部获取为同一个SEA机场代码,如果出现其它的HKG之类其它不同地域的时候则丢弃次ip不进行后续下载测速。 如果二次筛选是丢包未获取到机场代码的响应结果,应当执行排序到末尾队列还是直接丢弃啥的

🤖 功能修改


@1265578519 ,我已按照功能需求修改了源代码,重点如下:

  1. 取消对HTTP状态码的限制
  2. 统一将http header 小写匹配全部的 cf-ray
  3. 如果不指定colo ,则按第一次请求到的地区码为准

也增加了几个指标用来观察

先决条件


以下是环境配置:

国外VPS

操作系统: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

测试结果

国外机器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

1265578519 commented 1 year ago

@charSLee013 有没有exe,,发我试试,感觉你写的不太对可能有bug

charSLee013 commented 1 year ago

@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