官方文档的Host Discovery章节介绍了默认设置下Nmap的主机发现过程:
If no host discovery options are given, Nmap sends an ICMP echo request, a TCP SYN packet to port 443, a TCP ACK packet to port 80, and an ICMP timestamp request. These defaults are equivalent to the -PE -PS443 -PA80 -PP options.
意思是如果你没有给出任何主机发现选项,那么就会向目标主机发送 ICMP echo request, a TCP SYN packet to port 443, a TCP ACK packet to port 80, and an ICMP timestamp request这四个探测包来判断主机是否存活。如果对这四个探测包都没有回应,那么判断这个主机没有存活。
按照常理,在Nmap的某一种探测方法确认主机存活后,后续的探测方法不应该再发送, 我观察了几个在ICMP echo探测阶段确认主机是存活状态的情况,即接收到ICMP echo的响应数据包,如下图所示,在这之后就不会再发送另外三种探测包,直接发送NTP探测包探测123端口是否开放。
回复ICMP echo
但是如果在ICMP echo探测阶段没有确认主机的存活,那么后面的探测情况就变得奇怪,如下面几张图所示,即使443端口返回了数据包,后续两种探测包也会被发送;80端口返回了RST数据包后,主机会疯狂重复发送80端口的探测包。具体为什么会出现这种情况估计需要查看官方文档或者源代码才会得知(后续再做)。
网友评论