为什么Netcat扫描UDP端口总是成功?

我试图validation一些服务器可以通过某些端口进行通信,然后再将其中的一些服务迁移到这些服务器上,并且这些服务器不会被我们组织的防火墙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-4010040000-40100进行端口扫描,每个端口都会成功。

如果我在没有-u情况下执行相同的testing(以便testingTCP而不是UDP),则会得到40000 (tcp) timed out: Operation now in progress正如我所期望的那样40000 (tcp) timed out: Operation now in progress错误40000 (tcp) timed out: Operation now in progress (因为我没有在40000 )。

做一个sudo netstat -alnp | grep LISTEN sudo netstat -alnp | grep LISTEN mybox1虽然显示没有这些服务监听这些端口。 那么我错过了什么?

nc可能不是testing端口状态的最佳工具。 你有没有试过nmap ? 这实际上是一个端口扫描仪。 我检查了我的家庭networking上的文件服务器和127.0.0.1,都报告UDP port 40000已closures。

NMAP

 # nmap -sU -p 40000 igor Starting Nmap 7.01 ( https://nmap.org ) at 2016-08-18 18:27 EDT Nmap scan report for igor (192.168.1.125) Host is up (0.00027s latency). rDNS record for 192.168.1.125: igor.swass PORT STATE SERVICE 40000/udp closed unknown MAC Address: 68:05:CA:3A:BF:B7 (Intel Corporate) Nmap done: 1 IP address (1 host up) scanned in 0.53 seconds 

内核+ / dev

你也可以使用内核来这样做。 但是nmap可能会更好。

 # timeout 3 cat < /dev/udp/example.com/40000 

当我在同一台服务器(igor)上尝试nc时,我得到了和你一样的结果。 但是我又回去重试,现在没有返回输出(没有成功的消息),Wireshark显示通过ICMP发回“Destination unreachable”。 我不明白这一点。 但是我会切换到另一种检查UDP端口状态的方法。

UDP是一个“无连接”协议。 如果你发送一个数据包,而你没有得到拒绝(通过ICMP),它被认为是成功的。 这是不pipe是否有答复。 我没有收到远程端可能被认为是一个高层通信的问题,如DNS,但就UDP而言,这不是一个失败。

与有状态的TCP相比较。 没有收到答复(ACK)被认为是TCP中的失败(通常显示为“过滤”),否定答复(RST,将显示为closures)。

UDP:打开|过滤closuresTCP:打开closures过滤

没有防火墙块会阻止成功的UDP连接尝试,因为连接UDP不涉及发送任何内容或侦听任何响应。 在function上,UDP连接操作与发送到实际发送数据的点相同,即:

  1. 确保所选的本地端口可以绑定到,如果select了一个。
  2. 如果没有select本地端口,则select一个。
  3. locking端点,以便默认情况下,将与选定的IP和端口进行通信,并丢弃从任何其他IP地址或端口收到的任何数据报。
  4. 系统可能会改变它处理某些types的错误的方式。
  5. 而已。

请注意,这些都不会防火墙会干扰任何事情,也不会发送任何东西。