如何确认我的网络是否阻止了传出端口?
我在访问运行在端口 80 和 443 以外的端口上的服务器上的服务时遇到了问题。例如,我无法通过 ssh 进入运行在端口 22、2222、32415 等上的任何服务器。
此外,我工作所需的其他程序也失败了,例如 openvpn。
理想情况下,我想确定网络的端口列表不是阻塞。
我在图书馆的公共接入点。
答案1
总结
运行此命令来测试特定端口(快速)。
time nmap -p 22 portquiz.net
运行此命令来测试热门端口(慢速)。
time nmap portquiz.net
运行此命令进行测试全部端口(非常慢)。
time nmap -p- portquiz.net | grep -i open
解决方案说明
要测试网络上的某个恶意中间件是否阻止了某个传出端口,您可以尝试通过 telnet 连接到在该端口上运行服务的服务器。
在这个例子中,我们使用 portquiz.net——这是为此目的而设计的公共服务。它使用iptables 的 nat 表并打开所有 tcp 端口。
# first we verify that we _can_ connect over port 443, which >99% of
# networks won't block; it works
user@personal:~$ time echo 'exit' | telnet portquiz.net 443
Trying 178.33.250.62...
Connected to portquiz.net.
Escape character is '^]'.
Connection closed by foreign host.
real 0m0.069s
user 0m0.002s
sys 0m0.043s
user@personal:~$
# next we try to connect over a port that's suspected of being blocked; it fails
user@personal:~$ time echo 'exit' | telnet portquiz.net 22
Trying 178.33.250.62...
telnet: Unable to connect to remote host: Connection timed out
real 2m10.635s
user 0m0.004s
sys 0m0.035s
user@personal:~$
请注意,第一个命令立即退出并显示以下消息Connected to portquiz.net
,这表明传出端口 443 已不是被网络阻断。
但是,第二条命令显示Unable to connect to remote host: Connection timed out
。这表明 - 除非 portquiz.net 出现问题 - 否则您的网络上的传出端口 22 可能已被阻止。
您可以更进一步使用 nmap 获取所有端口的列表不是被网络阻断。 例如:
user@personal:~$ time nmap -p- portquiz.net | grep -i open
21/tcp open ftp
53/tcp open domain
80/tcp open http
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
1935/tcp open rtmp
4070/tcp open unknown
real 3m48.324s
user 0m18.885s
sys 0m29.077s
user@personal:~$
在上面的命令中,我们可以看到,除 21、53、80、143、443、465、587、993、1935 和 4070 之外,所有传出端口都被阻止。在正常/未经审查的网络中,这个列表会更长、更长(可能显示全部 65535 个端口)
答案2
这个问题有点模糊,因此很难回答——讽刺的是,我今天早上就遇到了这个问题。如果没有 ISP 的帮助,就不可能完全做到这一点。
首先要检查路由器是否允许所有这些通过 - 但这是典型 SOHO 路由器的默认状态。根据您的路由器,您可能能够在其上运行 tcpdump 查看外部接口(例如,如果它运行 dd-wrt)并查看数据包是否离开您的网络。如果您不能这样做,您的选择就非常有限 - 开启的 ISP 可能能够告诉您他们是否看到数据包进入他们的网络 - 但我不希望这适用于您的普通家庭用户连接。或者,如果您可以断开与网络无关的所有连接,您可能能够根据 PPP 接口数据包计数或查看尝试建立连接时调制解调器/路由器上闪烁的指示灯来提示流量是否离开网络。
接下来,如果您能够登录到您知道没有连接问题的服务器/虚拟服务器,并且该服务器有自己的“真实” IP 地址或正在服务器上应答,则可以登录到该远程计算机并在接口上使用 tcpdump 检查它是否正在从您的计算机接收数据包。如果没有,则数据包被丢弃 - 如果正在接收,则可能是防火墙或返回路径上的问题。
如果您有权访问远程(无防火墙)服务器,则可以在其上执行 tcpdump,同时使用 nmap 或 netcat 为该服务器生成流量并查看 tcpdump 看到的内容。
答案3
我认为测试你的 ISP 是否阻止了任何端口或者你的路由器防火墙是否阻止了它是相当有前途的。
比如说,您的 ISP 阻止了端口 22,当您尝试连接到打开端口 22 的服务器时,会发生连接超时。
现在打开本地网络上其他计算机上的 22 端口,如果你能够连接到本地网络上的该端口,则说明你的 ISP 阻止了你的 22 端口