干货!Nmap主机扫描原理分析
来源:天融信教育
提起Nmap,信安圈的小伙伴一定超有话讲,作为网络扫描事实上的行业标准,Nmap伴随我们走过了太多太多。对于Nmap的使用方法,网上参考资料众多,我也不在这里画蛇添足,下面主要对Nmap的主机扫描实现原理进行一下小小的解析。
关于主机扫描默认的-sP选项, Nmap官方指南是这么介绍的:
该选项告诉Nmap仅仅进行ping 扫描(主机发现),然后打印出对扫描做出响应的那些主机。没有进一步的测试(如端口扫描或者操作系统探测)。这比列表扫描更积极,常常用于和列表扫描相同的目的。它可以得到些许目标网络的信息而不被特别注意到。对于攻击者来说,了解多少主机正在运行比列表扫描提供的一列IP 和主机名往往更有价值。
-sP 选项在默认情况下, 发送一个ICMP 回声请求和一个TCP 报文到80端口。如果非特权用户执行,就发送一个SYN 报文(用connect()系统调用)到目标机的80端口。
笔者在实践中,发现指南中的描述和实际的抓包结果并不一致,下面举例说明。
先来说一个ping不通的主机,打开CMD,运行如下命令:
nmap -sP 1.2.3.4
使用wireshark抓包如下图所示,根据抓取到的流量,可以分析出实际上我们向目标主机发送了四种类型的数据包:
1、ICMP 回声请求
2、到目标443端口的TCP SYN报文
3、到目标80端口的TCP ACK报文
4、ICMP 时间戳请求
从抓包情况看,只有去主机1.2.3.4的IP包,没有从主机1.2.3.4传回的IP包,所以结论是没有扫描到活跃主机。
下面再看一个能ping通的例子,打开CMD,运行如下命令:
nmap -sP 1.1.1.1
使用wireshark抓包如下图所示,根据抓取到的流量,可以看到同样是向目标主机发送四种类型的数据包,不同的是这次目标主机1.1.1.1在TCP 80端口回送了RST包,在TCP 443端口回送了SYN,ACK包,这说明目标主机1.1.1.1在443端口处于开放状态,所以自然目标主机处于活跃状态。
总结一下,当我们使用Nmap进行网络主机扫描时,会发送四种类型的数据给目标主机,只要收到一个目标主机的回复包,即可证明目标主机处于活跃状态,这比官方指南上说明的只发送两种类型的数据包要复杂的多,并且80端口也不是发送SYN包,而是ACK包,依笔者揣测,这样改进应该是为了更好的应对防火墙的拦截规则。
最后来个彩蛋,让大家看一下1.1.1.1这个网站的访问结果,1.1.1.1是一个面向全世界提供DNS服务的网站,如果大家上网遇到了域名解析故障,不妨把自己的DNS服务器修改为1.1.1.1,也许有惊喜哟。
PS:以上分析仅面向扫描公网IP的场景,对于内网IP,nmap使用ARP扫描技术,实验结果和指南描述一致。
声明:该文章仅用于学术交流
感兴趣的小伙伴
扫描下方二维码