我正在尝试验证我们的一些服务器是否可以在将我们的一些服务迁移到它们之前通过某些端口进行通信,并且它们没有被我们组织的防火墙 ACL 阻止。
说得通
[mrduki@mybox1~]$ nc -ul 40000
---
[mrduki@mybox2~]$ nc -zvuw2 mybox1.com 40000
Connection to mybox1.com 40000 port [udp/*] succeeded!
没有意义
[mrduki@mybox1~]$ nc -ul 40000
[mrduki@mybox1~]$ ^C
---
[mrduki@mybox2~]$ nc -zvuw2 mybox1.com 40000
Connection to mybox1.com 40000 port [udp/*] succeeded!
事实上,如果我从 进行端口扫描40000-40100
,每个端口都会成功。
如果我在没有的情况下进行相同的测试-u
(以便它测试 TCP 而不是 UDP),我会得到40000 (tcp) timed out: Operation now in progress
错误,正如我所期望的那样(因为我没有监听这样的 TCP 服务40000
)。
做一个虽然显示没有这样的服务在这些端口上监听sudo netstat -alnp | grep LISTEN
。mybox1
那么我错过了什么?
UDP 是一种“无连接”协议。如果您发送一个数据包并且没有收到拒绝(通过 ICMP),那么无论您是否收到回复,都被认为是成功的。很常见的情况是防火墙阻止目标的 ICMP 拒绝数据包被发回给您(netcat 使用它来知道端口是否关闭,否则它认为它是打开的)。
将此与有状态的 TCP 进行对比。未能接收到回复 (ACK) 被视为 TCP 内的故障(这通常显示为“已过滤”),否定回复也是如此(RST,将显示为已关闭)。
UDP:打开|过滤关闭 TCP:打开关闭过滤
nc
可能不是测试端口状态的最佳工具。你试过nmap
吗?它实际上是一个端口扫描器。我检查了我的家庭网络和 127.0.0.1 上的文件服务器,两者都报告UDP port 40000
已关闭。地图
内核 + /dev
您也可以像这样使用内核来执行此操作。但
nmap
可能更好。当我
nc
在同一台服务器(igor)上尝试时,我得到了和你一样的结果。但是我回去再试一次,现在它没有返回任何输出(没有成功的消息),wireshark 显示“目标无法访问”正在通过 ICMP 发回。我不明白这些。但我会切换到另一种检查 UDP 端口状态的方法。没有防火墙阻止 UDP 连接尝试成功,因为使用 UDP 连接不涉及发送任何内容或侦听任何响应。在功能上,UDP 连接操作与发送到实际发送数据的点相同,即:
请注意,这些都不会做任何防火墙会干扰的事情,也不会在网络上发送任何东西。