Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
1265578519 opened this issue Mar 5, 2023 · 4 comments
Labels
功能建议 功能与建议

Comments

@1265578519
Copy link

1265578519 commented Mar 5, 2023

功能需求

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

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

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

curl 172.67.73.30 -i

问题图,某些ip会bgp路由到两个地域,HKG和SEA,然后来回跳导致HKG出现大量丢包引物无法访问。#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

@1265578519 1265578519 added the 功能建议 功能与建议 label Mar 5, 2023
@XIU2
Copy link
Owner

XIU2 commented Mar 6, 2023

因为测出来的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
Copy link
Contributor

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

🤖 功能修改


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

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

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

  • CFColo_empty 无法获取到地区码
  • CFColo_ignore 如果跟指定的colo 不匹配则忽略
  • CFColo_diff 后续测试中跟[指定的地区码/首次请求到的地区码]不同
  • CFColo_empty_after 第一次能获取到地区码,后续测试中无法获取地区码
  • CFColo_error 无法访问该IP地址
  • CFColo_success 成功通过测试
  • HttpPingCount 测试总数

先决条件


以下是环境配置:

国外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
  • Httping 尝试次数为10次
  • 目标端口为 80 (尽可能的跳过tls握手
  • Url 选为更为流量颇大的steam,避免小网站被限流
  • -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

@1265578519
Copy link
Author

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

@charSLee013
Copy link
Contributor

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
功能建议 功能与建议
Projects
None yet
Development

No branches or pull requests

3 participants