另外一个有趣的思路,测试 IP 特定端口是否被屏蔽的方法

2022-06-09 01:28:19 +08:00
 AlphaTauriHonda
之前发的文章并不能测试单个端口是否被屏蔽。因为 DNS 污染通常不会在非 53 端口上触发,https://www.v2ex.com/t/857393 这篇的 Supplement 1 是有误的。能在非 53 端口或者 53 端口 TCP 模式下触发污染的域名有限,而且不是很多。

对于测试单个端口,这个构造 DNS 请求的方法不太好用。https://ping.sx/dig 这个工具对于非 53 端口的 DNS 支持有些问题,在其他端口没有开启 DNS 服务的情况下依然给出了结果。应该还是请求的 53 端口,那个自定义端口的设置没什么用。

同样,用这个方法甚至不需要拥有 IP 或者在上面开任何服务。

对于单个端口的测试,我们可以通过构造一个包含被审查的 S N I 的 HTTPS 请求来触发 RESET ,同时检测有没有收到伪造的 RESET 来判断端口是否被墙。这个 RESET 在访问 1-65535 端口都会被触发。当然这只是目前的状况,情况有一定可能会变化。

随便找一个很短,被屏蔽的域名。www.bbc.com

找一个被墙端口的 IP ,对照两个没有被墙端口的 IP 。
就以 8.8.8.8 为例。8.8.8.8 的 443 端口被墙了,但是用来对照的 9.9.9.9 ,204.79.197.200 没有被墙 443 端口。


9.9.9.9 ,204.79.197.200 的 443 端口都没有一片红。


8.8.8.8 被墙了 443 端口。

用 cURL 来构造触发 RESET 的请求。
curl --resolve 'www.bbc.com:443:9.9.9.9' https://www.bbc.com
OpenSSL SSL_connect: Connection reset by peer in connection to www.bbc.com:443

curl --resolve 'www.bbc.com:443:204.79.197.200' https://www.bbc.com
OpenSSL SSL_connect: Connection reset by peer in connection to www.bbc.com:443
测试没有被墙相应端口的 IP ,可以正常收到伪造的 RESET 。

curl --resolve 'www.bbc.com:443:8.8.8.8' https://www.bbc.com
Failed to connect to www.bbc.com port 443: Connection timed out
用被墙了相应端口的 IP ,会出现 time out 错误,不能收到伪造的 RESET 。

如果要检测其他端口把这段命令里的 443 换掉就好了。
curl --resolve 'www.bbc.com:想检查的端口:被测 IP' https://www.bbc.com

测试 IP 的特定端口是否被屏蔽,目前只能在墙内使用 cURL 构造请求,应该没有什么方便的线上工具可以用。
4233 次点击
所在节点    宽带症候群
21 条回复
zhengxinhn
2022-06-09 01:46:51 +08:00
点个赞
learningman
2022-06-09 02:08:58 +08:00
明天我来写个 CLI 工具试试
mikeluckybiy
2022-06-09 02:13:31 +08:00
mark 一下,挺高大上的思路,需要个好的工具
myki
2022-06-09 08:08:56 +08:00
mark ,火钳刘明
inprtx
2022-06-09 08:41:12 +08:00
没必要 sni ,直接 curl ip:port -v 就能知道,http ok,tcp reset ,tcp reject ,tcp dorp ,四种状态
GuuJiang
2022-06-09 09:08:30 +08:00
@inprtx 你没有理解 op 的目的,结合着 op 的上一篇帖子看,是利用墙内部不同模块之间的优先级,所以人为制造一个满足被墙条件的场景是必需的
zgc27wo
2022-06-09 11:59:09 +08:00
bbc,嘿嘿
AlphaTauriHonda
2022-06-09 12:48:38 +08:00
@zgc27wo 因为这域名是真的短。刚才想到一个更短的。
dw.com Deutsche Welle
AlphaTauriHonda
2022-06-09 13:02:03 +08:00
@learningman 十分感谢!

@inprtx 用这个方法不需要拥有 IP 或者在上面开任何服务。

@GuuJiang 差不多就是这样。利用墙会发出伪造包的特性,构造能触发伪造的请求,主动探测被测试 IP 或者特定端口是否被墙。
mensheviks
2022-06-09 13:51:34 +08:00
@AlphaTauriHonda 你昨天发的那个 rdrc.mnd.gov.tw 的帖子呢? rdrc.mnd.gov.tw 在赵安法实施之前就没法连上了,而且 traceroute 的过程中是在中华电信 hinet 的路由上中断的。
mensheviks
2022-06-09 13:53:50 +08:00
@AlphaTauriHonda 还有就是美国那些.mil 域名的网站用香港本地的 name server 也是解析不出来的,这甚至在反修例之前就已开始了,是懂王命令军队这样做的
mensheviks
2022-06-09 14:02:09 +08:00
@AlphaTauriHonda 还有就是你的那个香港网络审查页面上的网站都能打开,是因为你使用的 dns 解析服务器都是 8888 8844 之类的,香港现在屏蔽网站的方法是让 HKT 、HKBN 这些 isp 在家庭宽带访问的属于 isp 的 dns 解析服务器里面直接加入一条篡改域名解析结果的记录
AlphaTauriHonda
2022-06-09 14:10:56 +08:00
@mensheviks 这个问题看起来是不让说,虽然我发的是技术问题。
不要发和本帖没有相关性的回复。
在之后才连不上的。
被审查的*.*.*.67 和没有被审查的*.*.*.125 都是在中华电信的路由之后就没有回应。是因为这 IP 的 /24 都屏蔽了 ICMP ,同时 AS4782 的上游只有 HiNet ,当然会在 HiNet 之后就没有回应。
AlphaTauriHonda
2022-06-09 14:13:39 +08:00
@mensheviks 不要在本帖下连续问不相关的问题。www.v2ex.com/t/858294 说的是大陆的🧱。和🇭🇰的有什么关系?
mensheviks
2022-06-09 14:32:58 +08:00
AlphaTauriHonda
2022-06-09 14:54:40 +08:00
@mensheviks 好。我看不到整个 go/flamewar ,只能单独看到这个网址。
learningman
2022-06-09 16:06:54 +08:00
https://github.com/Zxilly/knockknock
写好了,但是现在应该只能在 Windows 上用。。。我等下琢磨下跨平台的怎么判断
learningman
2022-06-09 19:46:32 +08:00
Ok ,跨平台的修好了,binary 可以从 Release 下
但是 Windows Defender 会报毒,我不打算修了,应该是引入了 syscall 的原因
AlphaTauriHonda
2022-06-10 00:43:51 +08:00
h4wklee
2022-06-10 15:24:33 +08:00
楼主觉得嘉斯利还有机会去大红牛吗😆

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/858294

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX