XIU2 / CloudflareSpeedTest

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

能否测速结果增加城市和地区项 #412

Open S1U opened 11 months ago

S1U commented 11 months ago

功能需求

nice to have 在下载速度右边增加ip所在城市和地区名称,

预期目标

方便一眼就能知道ip的地理位置

charSLee013 commented 11 months ago

我倒是有一个现成的方法而且还能兼容其他工具

你可以下载一个nali软件,然后将其二进制执行文件放到PATH环境变量里

在执行测速的时候通过管道运算符传递给 nali,就像下面这样

$ ./CloudflareSpeedTest | nali
# XIU2/CloudflareSpeedTest

开始延迟测速(模式:TCP,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms,丢包几率上限:1.00 )
5955 / 5955 [------------------------------------------------------------------------------------------------------------------------------------------------] 可用: 2666
开始下载测速(下载速度下限:0.00 MB/s,下载测速数量:10,下载测速队列:10):
10 / 10 [----------------------------------------------------------------------------------------------------------------------------------------------------]
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
104.19.217.254 [美国 CloudFlare节点]     4       4       0.00    16.73     0.00
104.19.226.159 [美国 CloudFlare节点]     4       4       0.00    16.74     0.00
104.20.150.165 [美国 CloudFlare节点]     4       4       0.00    16.76     0.00
104.19.198.138 [美国 CloudFlare节点]     4       4       0.00    16.76     0.00
104.16.77.53 [美国 CloudFlare节点]       4       4       0.00    16.81     0.00
162.159.23.11 [美国 CloudFlare]      4       4       0.00    16.81     0.00
104.19.181.172 [美国 CloudFlare节点]     4       4       0.00    16.82     0.00
104.17.51.105 [美国 CloudFlare节点]      4       4       0.00    16.82     0.00
104.22.11.38 [美国 CloudFlare节点]       4       4       0.00    16.83     0.00
104.22.39.45 [美国 CloudFlare节点]       4       4       0.00    16.86     0.00

完整测速结果已写入 result.csv 文件,可使用记事本/表格软件查看。
t-e-s-tweb commented 11 months ago

It's only giving US cloudflare which it'll give for all of the official IP addresses. The current check method of CF requires making a http request and reading the header from that. Which isn't possible with your current software.

leic4u commented 8 months ago

我倒是有一个现成的方法而且还能兼容其他工具

你可以下载一个nali软件,然后将其二进制执行文件放到PATH环境变量里

在执行测速的时候通过管道运算符传递给 nali,就像下面这样

$ ./CloudflareSpeedTest | nali
# XIU2/CloudflareSpeedTest

开始延迟测速(模式:TCP,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms,丢包几率上限:1.00 )
5955 / 5955 [------------------------------------------------------------------------------------------------------------------------------------------------] 可用: 2666
开始下载测速(下载速度下限:0.00 MB/s,下载测速数量:10,下载测速队列:10):
10 / 10 [----------------------------------------------------------------------------------------------------------------------------------------------------]
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
104.19.217.254 [美国 CloudFlare节点]     4       4       0.00    16.73     0.00
104.19.226.159 [美国 CloudFlare节点]     4       4       0.00    16.74     0.00
104.20.150.165 [美国 CloudFlare节点]     4       4       0.00    16.76     0.00
104.19.198.138 [美国 CloudFlare节点]     4       4       0.00    16.76     0.00
104.16.77.53 [美国 CloudFlare节点]       4       4       0.00    16.81     0.00
162.159.23.11 [美国 CloudFlare]      4       4       0.00    16.81     0.00
104.19.181.172 [美国 CloudFlare节点]     4       4       0.00    16.82     0.00
104.17.51.105 [美国 CloudFlare节点]      4       4       0.00    16.82     0.00
104.22.11.38 [美国 CloudFlare节点]       4       4       0.00    16.83     0.00
104.22.39.45 [美国 CloudFlare节点]       4       4       0.00    16.86     0.00

完整测速结果已写入 result.csv 文件,可使用记事本/表格软件查看。

确实不错。请教一下,这个可不可以支持指定某区域测速呢,类似于本项目 httping 的 机场三字码圈定测速范围那个功能。(本项目提供的 httping 测延迟被限太死了,默认的 200 并发,只能扫前面 70 80 个)

charSLee013 commented 8 months ago

确实不错。请教一下,这个可不可以支持指定某区域测速呢,类似于本项目 httping 的 机场三字码圈定测速范围那个功能。(本项目提供的 httping 测延迟被限太死了,默认的 200 并发,只能扫前面 70 80 个)

问号?我用的就是本项目的CloudflareSpeedTest来进行测速的呀 nali只是识别输出的IP地址,然后将 IP地址 替换成 IP地址[IP所在地] 而已

默认的 200 并发

其实并发数量可以用 -n <线程数> 来进行更改,默认200是为了照顾小型设备

leic4u commented 8 months ago

问号?我用的就是本项目的CloudflareSpeedTest来进行测速的呀 nali只是识别输出的IP地址,然后将 IP地址 替换成 IP地址[IP所在地] 而已

我的意思是,使用 nali 这个工具时,有没有办法可以实现只测指定区域,比如碰到指定区域外的 IP 就跳过,这样可以节约些时间,测速能快些。类似于本项目实现的,在使用 httping 模式测速时,使用机场三字码来指定测速范围的那个功能。

其实并发数量可以用 -n <线程数> 来进行更改,默认200是为了照顾小型设备

但是,httping 模式测延迟,容易被运营商识别为在对外进行网络扫描,扫一会儿就会被阻断限制。在 200 并发时只能扫到前面 70 80 个左右的 IP 。如果调高并发,更容易被阻断。调低并发比如 10 甚至更低,估计可以一定程度上避免被阻断,但效率太低了。所以我说被限得太死了呢,httping 测速可用性是不太高的。

我请教你的目的是看你知不知道通过这个 nali 的功能,配合本项目,实现跟 httping 模式测速相同的,指定区域测速 这个功能。

charSLee013 commented 8 months ago

我请教你的目的是看你知不知道通过这个 nali 的功能,配合本项目,实现跟 httping 模式测速相同的,指定区域测速 这个功能。

@leic4u ,这个想法很不错,我花了几天时间做好一个小工具 IPGeoCIDR 它会解析传入进来的CIDR,然后进行正则匹配IP所在的地理国家的名称,最后保存匹配成功的IP地址

比如说想要东亚附近国家的Cloudflare CDN IP

# 拉取项目
git clone https://github.com/charSLee013/IPGeoCIDR.git
cd ./IPGeoCIDR

# 下载cloudflare ip range 并导出
wget -O ips.txt https://www.cloudflare.com/ips-v4/#
go run . -cidr ips.txt -country "(日本|韩国|新加坡)" -output "geo_ips.txt"

geo_ips.txt放到跟 CloudflareSpeedTest 同一目录下面对匹配的IP地址进行测试

./CloudflareSpeedTest -httping -f geo_ips.txt 
# XIU2/CloudflareSpeedTest  

开始延迟测速(模式:HTTP,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms,丢包几率上限:1.00 )
14592 / 14592 [-----------------------------------------------------------------------------------------] 可用: 0  

[信息] 延迟测速结果 IP 数量为 0,跳过下载测速。

[信息] 完整测速结果 IP 数量为 0,跳过输出结果。

很可惜,没有任何匹配

原因

有个显而易见的问题就是此类IP记录数据库有 延迟性 ,并且可以从Cloudflare System Status 网站看到不同的地区的路由一直是有调整的,这会导致在测试结果不符合预期

另一个解决方案

正如之前所言

如果调高并发,更容易被阻断。调低并发比如 10 甚至更低,估计可以一定程度上避免被阻断,但效率太低了。所以我说被限得太死了呢,httping 测速可用性是不太高的。

家庭网络终究会有些局限性,所以最好的解决方案是使用别人筛选过的节点

比如我一直在用的 cf-gf.heinu.cc 域名,该域名指向的Cloudflare CDN IP地址可用性很高,具体操作如下

dig @223.5.5.5 cf-gf.heinu.cc +short > cdn_ips.txt
./CloudflareSpeedTest -f cdn_ips.txt
# XIU2/CloudflareSpeedTest

开始延迟测速(模式:TCP,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms,丢包几率上限:1.00 )
34 / 34 [-------------------------------------------------------------------------------------------------] 可用: 34
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
104.19.225.96     4       4       0.00    35.56     0.00
172.67.5.229      4       4       0.00    40.00     0.00
190.93.244.183    4       4       0.00    67.48     0.00
104.17.177.245    4       4       0.00    73.59     0.00
141.101.120.109   4       4       0.00    103.56    0.00
104.16.10.222     4       4       0.00    128.49    0.00
172.67.79.39      4       4       0.00    160.64    0.00
172.67.64.126     4       4       0.00    160.78    0.00
172.67.200.204    4       4       0.00    161.07    0.00
172.67.169.244    4       4       0.00    161.42    0.00

完整测速结果已写入 result.csv 文件,可使用记事本/表格软件查看。
leic4u commented 8 months ago

家庭网络终究会有些局限性,所以最好的解决方案是使用别人筛选过的节点

比如我一直在用的 cf-gf.heinu.cc 域名,该域名指向的Cloudflare CDN IP地址可用性很高,具体操作如下

非常感谢,这也是一个不错的办法。但这个方法也不够完美,主要是由于要找一个这种筛选好节点的域名,又是一个具有巨大信息差和学习成本的事情。

如果你不提这个方法和这个域名,我甚至都不知道可以用别人筛选好的域名(因为不确定别人筛选好的适不适合自己的宽带),更不知道如何去找这类域名。

比如我想用 AWS 或 Gcore 的 CDN 时,就算我知道了这个方法,我也不知道在哪里去找别人筛选好 IP 地址的域名。😂

目前我在用的方法是:先把所有 /24 IP 段跑一遍,再拿结果去 https://lwebapp.com/zh/ip-batch 匹配一遍归属地,这样来找既对自己家宽带友好,离自己服务器又近的 IP 地址。


补充一个问题,我用的本项目最新版本,对撸下来的 IP 地址进行测速时,提示我 ParseCIDR err invalid CIDR address:,不是 IP 段不让测,为啥你的可以。

PS C:\CloudflareST_windows_amd64> .\CloudflareST.exe -f .\cdn_ips.txt -tl 200 -tll 50 -tlr 0 -dd
# XIU2/CloudflareSpeedTest v2.2.4

/128/11/16 23:25:00 ParseCIDR err invalid CIDR address: ��2606:4700:3034:3650:99fd:9b08:d730:2622
PS C:\CloudflareST_windows_amd64>
charSLee013 commented 8 months ago

补充一个问题,我用的本项目最新版本,对撸下来的 IP 地址进行测速时,提示我 ParseCIDR err invalid CIDR address:,不是 IP 段不让测,为啥你的可以。

PS C:\CloudflareST_windows_amd64> .\CloudflareST.exe -f .\cdn_ips.txt -tl 200 -tll 50 -tlr 0 -dd
# XIU2/CloudflareSpeedTest v2.2.4

/128/11/16 23:25:00 ParseCIDR err invalid CIDR address: ��2606:4700:3034:3650:99fd:9b08:d730:2622
PS C:\CloudflareST_windows_amd64>

2606:4700:3034:3650:99fd:9b08:d730:2622 是IPv6的地址,不是IPv4地址, 可以增加-4来强制解析IPv4的IP地址

❯ dig @223.5.5.5 cf-gf.heinu.cc +short -4
104.19.225.96
172.67.129.12
162.159.243.52
190.93.244.183
172.67.69.17
172.67.73.32
172.67.75.82
172.67.161.86
172.67.143.96
104.17.177.245
172.67.76.231
172.67.67.94
172.64.200.208
172.64.173.180
172.67.5.229
172.67.66.140
141.101.120.109
172.64.201.89
172.67.79.39
172.67.168.202
172.67.200.204
172.67.169.244
172.67.169.224
172.67.171.122
162.159.160.235
172.67.78.153
162.159.137.157
172.67.169.71
172.67.64.126
172.67.203.195
104.16.10.222
172.67.180.4
172.67.196.58
172.67.199.120

如果想要测试IPv6地址,我就无能为力,我没有在IPv6环境和设备上测试过😔 这一点可以请教下项目作者 maintainer XIU2

leic4u commented 8 months ago

2606:4700:3034:3650:99fd:9b08:d730:2622 是IPv6的地址,不是IPv4地址, 可以增加-4来强制解析IPv4的IP地址

本项目是支持 IPv6 地址测速的,我本地环境也有 IPv6 地址,之前也测过 IPv6 的一些 IP 段。上面那个报错应该不是 IPv6 的原因。应该是 IP 段和具体 IP 地址的差别导致的。

lemongad commented 3 months ago

我倒是有一个现成的方法而且还能兼容其他工具

你可以下载一个nali软件,然后将其二进制执行文件放到PATH环境变量里

在执行测速的时候通过管道运算符传递给 nali,就像下面这样

$ ./CloudflareSpeedTest | nali
# XIU2/CloudflareSpeedTest

开始延迟测速(模式:TCP,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms,丢包几率上限:1.00 )
5955 / 5955 [------------------------------------------------------------------------------------------------------------------------------------------------] 可用: 2666
开始下载测速(下载速度下限:0.00 MB/s,下载测速数量:10,下载测速队列:10):
10 / 10 [----------------------------------------------------------------------------------------------------------------------------------------------------]
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
104.19.217.254 [美国 CloudFlare节点]     4       4       0.00    16.73     0.00
104.19.226.159 [美国 CloudFlare节点]     4       4       0.00    16.74     0.00
104.20.150.165 [美国 CloudFlare节点]     4       4       0.00    16.76     0.00
104.19.198.138 [美国 CloudFlare节点]     4       4       0.00    16.76     0.00
104.16.77.53 [美国 CloudFlare节点]       4       4       0.00    16.81     0.00
162.159.23.11 [美国 CloudFlare]      4       4       0.00    16.81     0.00
104.19.181.172 [美国 CloudFlare节点]     4       4       0.00    16.82     0.00
104.17.51.105 [美国 CloudFlare节点]      4       4       0.00    16.82     0.00
104.22.11.38 [美国 CloudFlare节点]       4       4       0.00    16.83     0.00
104.22.39.45 [美国 CloudFlare节点]       4       4       0.00    16.86     0.00

完整测速结果已写入 result.csv 文件,可使用记事本/表格软件查看。

事实上这只是ip的位置,如果对于cloudflare 来说,路径/cdn-cgi/trace 可以获取cloudflare节点的位置,这个位置更有意义

heinu123 commented 2 months ago

我请教你的目的是看你知不知道通过这个 nali 的功能,配合本项目,实现跟 httping 模式测速相同的,指定区域测速 这个功能。

@leic4u ,这个想法很不错,我花了几天时间做好一个小工具 IPGeoCIDR 它会解析传入进来的CIDR,然后进行正则匹配IP所在的地理国家的名称,最后保存匹配成功的IP地址

比如说想要东亚附近国家的Cloudflare CDN IP

# 拉取项目
git clone https://github.com/charSLee013/IPGeoCIDR.git
cd ./IPGeoCIDR

# 下载cloudflare ip range 并导出
wget -O ips.txt https://www.cloudflare.com/ips-v4/#
go run . -cidr ips.txt -country "(日本|韩国|新加坡)" -output "geo_ips.txt"

geo_ips.txt放到跟 CloudflareSpeedTest 同一目录下面对匹配的IP地址进行测试

./CloudflareSpeedTest -httping -f geo_ips.txt 
# XIU2/CloudflareSpeedTest  

开始延迟测速(模式:HTTP,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms,丢包几率上限:1.00 )
14592 / 14592 [-----------------------------------------------------------------------------------------] 可用: 0  

[信息] 延迟测速结果 IP 数量为 0,跳过下载测速。

[信息] 完整测速结果 IP 数量为 0,跳过输出结果。

很可惜,没有任何匹配

原因

有个显而易见的问题就是此类IP记录数据库有 延迟性 ,并且可以从Cloudflare System Status 网站看到不同的地区的路由一直是有调整的,这会导致在测试结果不符合预期

另一个解决方案

正如之前所言

如果调高并发,更容易被阻断。调低并发比如 10 甚至更低,估计可以一定程度上避免被阻断,但效率太低了。所以我说被限得太死了呢,httping 测速可用性是不太高的。

家庭网络终究会有些局限性,所以最好的解决方案是使用别人筛选过的节点

比如我一直在用的 cf-gf.heinu.cc 域名,该域名指向的Cloudflare CDN IP地址可用性很高,具体操作如下

dig @223.5.5.5 cf-gf.heinu.cc +short > cdn_ips.txt
./CloudflareSpeedTest -f cdn_ips.txt
# XIU2/CloudflareSpeedTest

开始延迟测速(模式:TCP,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms,丢包几率上限:1.00 )
34 / 34 [-------------------------------------------------------------------------------------------------] 可用: 34
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
104.19.225.96     4       4       0.00    35.56     0.00
172.67.5.229      4       4       0.00    40.00     0.00
190.93.244.183    4       4       0.00    67.48     0.00
104.17.177.245    4       4       0.00    73.59     0.00
141.101.120.109   4       4       0.00    103.56    0.00
104.16.10.222     4       4       0.00    128.49    0.00
172.67.79.39      4       4       0.00    160.64    0.00
172.67.64.126     4       4       0.00    160.78    0.00
172.67.200.204    4       4       0.00    161.07    0.00
172.67.169.244    4       4       0.00    161.42    0.00

完整测速结果已写入 result.csv 文件,可使用记事本/表格软件查看。

我似乎并没有许可你使用我域名对节点进行加速?

charSLee013 commented 2 months ago

我似乎并没有许可你使用我域名对节点进行加速?

@heinu123 我不太了解为啥DNS请求需要授权许可?如果这个加速域名是用于私人目的,应该采用basic auth 等手段来进行保护或者其他方式来限制和认证请求。

o0HalfLife0o commented 2 months ago

https://github.com/o0HalfLife0o/cfst/releases 前两天改的,输出内容加了端口和地区码,本来还想直接在读取ip文件的不同端口号,不过想想算了,毕竟go不太会

IP 地址,端口,已发送,已接收,丢包率,平均延迟,下载速度 (MB/s),地区码
1.1.1.1,2053,4,4,0.00,26.79,0.00,HKG