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

httping无法正常工作 #559

Open
cnthunder opened this issue Dec 14, 2024 · 4 comments
Open

httping无法正常工作 #559

cnthunder opened this issue Dec 14, 2024 · 4 comments
Labels
反馈问题 某些功能失效 或 没有达到预期

Comments

@cnthunder
Copy link

问题描述

httping几乎99%的失败率,起初我怀疑是因为被cf封了导致的,但是哪怕用-n 1参数都没用。
然后我尝试了对单个IP进行测试,依然无法正常测速。

root@OpenWrt:/home# cdnspeedtest -ip 190.93.245.22 -httping
# XIU2/CloudflareSpeedTest v2.2.5 

开始延迟测速(模式:HTTP, 端口:443, 范围:0 ~ 9999 ms, 丢包:1.00)
1 / 1 [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 可用: 0  

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

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

但是我直接httping是可以取到延迟的

root@OpenWrt:/home# httping 190.93.245.22 -c 5 -i 0.1 -t 0.5 -s
PING 190.93.245.22:80 (/):
connected to 190.93.245.22:80 (395 bytes), seq=0 time=418.07 ms 403 Forbidden
connected to 190.93.245.22:80 (395 bytes), seq=1 time=109.23 ms 403 Forbidden
connected to 190.93.245.22:80 (395 bytes), seq=2 time=443.42 ms 403 Forbidden
connected to 190.93.245.22:80 (395 bytes), seq=3 time=360.30 ms 403 Forbidden
connected to 190.93.245.22:80 (395 bytes), seq=4 time=419.45 ms 403 Forbidden
--- http://190.93.245.22/ ping statistics ---
5 connects, 0 ok, 100.00% failed, time 2254ms

带-httping-code 403仍然没用

root@OpenWrt:/home# cdnspeedtest -ip 190.93.245.22 -httping -httping-code 403
# XIU2/CloudflareSpeedTest v2.2.5 

开始延迟测速(模式:HTTP, 端口:443, 范围:0 ~ 9999 ms, 丢包:1.00)
1 / 1 [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 可用: 0  

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

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

指定url也没用

root@OpenWrt:/home# cdnspeedtest -ip 190.93.245.22 -httping -url https://www.gstatic.com/generate_204
# XIU2/CloudflareSpeedTest v2.2.5 

开始延迟测速(模式:HTTP, 端口:443, 范围:0 ~ 9999 ms, 丢包:1.00)
1 / 1 [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 可用: 0  

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

[信息] 完整测速结果 IP 数量为 0,跳过输出结果。
root@OpenWrt:/home# 

软件版本

XIU2/CloudflareSpeedTest v2.2.5

附加截图

No response

@cnthunder cnthunder added the 反馈问题 某些功能失效 或 没有达到预期 label Dec 14, 2024
@XIU2
Copy link
Owner

XIU2 commented Dec 15, 2024

cdnspeedtest -ip 190.93.245.22 -httping -url https://www.gstatic.com/generate_204

你为什么要用谷歌的域名去测试 Cloudflare CDN 的 IP?这肯定会失败。

另外,你用的其他 httping 软件实际测试的是 http://190.93.245.22/,而用本项目实际测试的则是 https://下载测速地址(通过你指定的 IP 去访问)。
这是两者完全不同的情况,得到的结果自然不会相等。


我建议你随便找个国内网站来测速,这能排除掉很多影响测速结果的因素。
比如百度吧,先 ping www.baidu.com 得到其 IP,然后像下面这样指定参数即可。

cfst -ip 111.206.208.133 -url https://www.baidu.com -o "" -dd

# XIU2/CloudflareSpeedTest v2.2.5

开始延迟测速(模式:TCP, 端口:443, 范围:0 ~ 9999 ms, 丢包:1.00)
1 / 1 [------------------------------------------------------------------------------------------------------] 可用: 1
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
111.206.208.133   4       4       0.00    17.79     0.00

我也用你的这个 IP 测试了,指定的是一个没有被封的国外网站(随便想到的,一个 IP 查询网站):

cfst -ip 190.93.245.22 -url https://ip.sb -o "" -dd

# XIU2/CloudflareSpeedTest v2.2.5

开始延迟测速(模式:TCP, 端口:443, 范围:0 ~ 9999 ms, 丢包:1.00)
1 / 1 [------------------------------------------------------------------------------------------------------] 可用: 1
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
190.93.245.22     4       1       0.75    293.64    0.00

再补充一个使用默认下载测速地址的情况(间隔了几分钟,这个 IP 的质量倒是恢复了,之前可能是网络波动):

cfst -ip 190.93.245.22 -o "" -dd

# XIU2/CloudflareSpeedTest v2.2.5

开始延迟测速(模式:TCP, 端口:443, 范围:0 ~ 9999 ms, 丢包:1.00)
1 / 1 [------------------------------------------------------------------------------------------------------] 可用: 1
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
190.93.245.22     4       4       0.00    182.09    0.00

另外,你是在路由器上运行的,这样的话,你还需要注意一下是不是代理配置有误,错误的配置也会引起 CFST 工作异常(或者你可以先把路由器上的代理关了,再试试是否测速正常,这样就能知道是否和代理配置有关了)。

@cnthunder
Copy link
Author

cnthunder commented Dec 15, 2024

你为什么要用谷歌的域名去测试 Cloudflare CDN 的 IP?这肯定会失败。

另外,你用的其他 httping 软件实际测试的是 http://190.93.245.22/,而用本项目实际测试的则是 https://下载测速地址(通过你指定的 IP 去访问)。
这是两者完全不同的情况,得到的结果自然不会相等。

理解了,差不多是通过测试IP利用类似ws的方式去请求url,然后测试的url得走了cf的代理才能响应。

root@OpenWrt:/home/dnsupdate# cdnspeedtest -o "" -dd -ip 190.93.245.22 -url https://speed.cloudflare.com -httping
# XIU2/CloudflareSpeedTest v2.2.5 

开始延迟测速(模式:HTTP, 端口:443, 范围:0 ~ 9999 ms, 丢包:1.00)
1 / 1 [------------------------------------------------------------------------------------------------------------------------] 可用: 1  
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
190.93.245.22     4       4       0.00    216.70    0.00               
root@OpenWrt:/home/dnsupdate# cdnspeedtest -o "" -dd -ip 190.93.245.22 -url https://visa.cn -httping
# XIU2/CloudflareSpeedTest v2.2.5 

开始延迟测速(模式:HTTP, 端口:443, 范围:0 ~ 9999 ms, 丢包:1.00)
1 / 1 [------------------------------------------------------------------------------------------------------------------------] 可用: 1  
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
190.93.245.22     4       4       0.00    220.96    0.00       

我的测试环境是openwrt+openclash,如果openclash上配置代理路由器的流量,tcping就不正常(基本是0.5-4ms内响应,搜了一下是clash内核的问题,直接在本地响应了)——除非关闭代理路由器的选项。
我想保留路由器的流量的代理,所以才想着用httping。

不过,cfst的httping确实太容易被ban,不知道是不是跟实现机制有关系(https://下载测速地址 通过你指定的 IP 去访问)
我在想,既然cf的地址本身就会响应80 443这些端口的httping,返回的也正好就是要测试的IP本身的httping延迟,那为什么不直接 https://测试IP 呢?这样会不会减少被判定为恶意扫描的机率。。。

@XIU2
Copy link
Owner

XIU2 commented Dec 16, 2024

理解了,差不多是通过测试IP利用类似ws的方式去请求url,然后测试的url得走了cf的代理才能响应。

你说的这个 ws 是我认为的 WebSocket 吗?如果是的话,那说明你理解的更偏了。。。

HTTPing 延迟测速过程可以简单的理解为(多次的话则计算平均值):

curl -I -w "总耗时: %{time_total} 秒" --resolve 下载测速地址的域名:443:IP https://下载测速地址

下载测速过程,就是把上面的 -I 参数移除,并将获取到的内容直接丢弃(类似 -o /dev/null),当然最后还要用下载总量除以下载总时间得出平均下载速度。

curl -o /dev/null --resolve 下载测速地址的域名:443:IP https://下载测速地址

至于你下半段内容,这是 HTTP Ping 本身的弊端,无法通过任何方式解决,只能缓解。

HTTP Ping 本质上就是通过 HTTP 方式访问该 IP,然后测算时间,因此也可以算是 DDOS 攻击中的 CC 攻击(大量的网页请求让网站服务器忙不过来从而崩溃),也是因为这个原因,导致其容易被 网站/CDN 的防火墙误会。

而 CFST 已经在该功能讨论阶段实施了缓解措施,也就是从获取 HTTP 完整响应改为仅获取头部响应(即 curl xxxcurl -I xxx 的区别,请求方法也从 GET 变为 HEAD),从完整获取网页内容变为了仅获取响应头,而响应头特别小,这样避免了不同下载测速地址对 HTTPing 结果的影响,同时这种方式对 网站/CDN 的压力负荷也会极大幅降低,减少了被网站/CDN 防火墙阻止的概率(或阈值),毕竟应该没什么人用 HEAD 方法 CC 攻击吧(因为不需要输出网页内容,只需要直接返回极小的响应头)。。。

#254 #282

经过该方式缓解后,触发封 IP 的概率已经降低到可以使用的程度了(要知道在之前,那基本上从连续第二次 HTTPing 开始就会出现不同程度的封 IP 情况),也是因此 CFST 才正式加入 HTTPing 功能。


关于你说的直接访问 https://190.93.245.22/ 的方式,因为这些节点 IP 压根没有 IP 证书,因此这样访问或许能获得该 IP 的延迟(我没具体试过),但也仅此而已,其他的就不行了(比如机场三字码需要通过响应头获取)。

另外,这种方式不会减少被判定为恶意扫描的概率,甚至反而会“坐实”你在恶意扫描。。。
CDN 的话还好1,但是对于一些个人网站,只要他们有最起码的安全意识及措施,那么就会禁止你通过 https://IP/ 的方式访问服务器,因为这涉及到一个证书“漏洞”:

如果一个网站没有对 IP:443 的虚拟主机做额外处理,那么 Nginx(其他我没怎么用过)就会提供服务器上其他虚拟主机的证书给你,因此通过这样的“漏洞”,就能获知该服务器(IP)上有没有其他虚拟主机(网站),域名是什么等等信息。

特别是对于套了 CDN 的网站来说,这很严重,因为这些网站既然套了 CDN,那么就基本上是为了包含网站的源站服务器不被发现(以避免被攻击),而这种方式可以绕过 CDN 获得网站的真实 IP,导致失去 CDN 的防火墙防护,且需要付费更换服务器 IP 才能弥补。

因为我以前做过网站,也套过 CDN,所以我对这些很清楚,这属于网站安全必要措施。


总之,有舍就有得,HTTP Ping 的弊端无法解决,你要做出取舍。

Footnotes

  1. 虽然我最初设计该软件是用来测速 Cloudflare CDN 的,但后来随着我的需求扩展,我在后续更新中也对 CFST 做了完善,使其也可以适用于其他 CDN、网站,而且说实话我目前绝大部分情况下使用 CFST 都已经不是用来测速 CF CDN 了,我自己是已经很满意了(毕竟是完全按照我自己的需求自学自写自足的)

@cnthunder
Copy link
Author

我这边的情况是Httping的话,测速IP稍微多一点就大概率会被ban了,不知道是不是跟本地运营商也有关系。
我现在还是先用着tcping吧

感谢大佬的耐心解答~

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

2 participants