之前发的文章并不能测试单个端口是否被屏蔽。因为 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.comOpenSSL SSL_connect: Connection reset by peer in connection to
www.bbc.com:443curl --resolve '
www.bbc.com:443:204.79.197.200'
https://www.bbc.comOpenSSL 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.comFailed 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 构造请求,应该没有什么方便的线上工具可以用。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/858294
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.