络扫描是信息收集的重要手段。通过扫描可以发现存活主机、开放端口,进而发现其运行的服务、操作系统等信息,为下一步的工作奠定基础。扫描工具的选取尤为重要。目前,有不少扫描工具可供选择,且各有特色。其中,Nmap以其强大而丰富的功能被绝大部分人所使用。除此之外,号称“45分钟扫描全网”的Zmap以及“6分钟扫描全网”的Masscan也有着较高的使用率。接下来,本文将对Nmap、Zmap、Masscan这三种扫描工具进行一些比较。
Nmap可以在Linux、Windows、Mac OS下运行,并且有图形化界面Zenmap;
Zmap、Masscan可以在Linux、Mac OS下运行,同时也可以在Windows下使用,不过要借助Cygwin等工具。
Zmap采用了无状态的扫描技术,没有进行完整的TCP三次握手,因此扫描速度极大提升。Zmap的基本功能是扫描发现主机的开放端口。
Masscan与Zmap类似,同样采用了无状态的扫描技术。
Nmap的功能非常强大,而且作为一个广泛使用的开源工具,全球的开发者都为其功能的丰富贡献了力量。因此,本文仅对其功能进行简单的描述。
基本功能:主机发现,开放端口扫描,支持多端口、多网段,可对目标域名进行扫描;
识别功能:识别端口服务类型及版本、操作系统、设备类型等;
扫描模式:TCP SYN scan、TCP connectscan、UDP scan、No Ping scan等;
规避检测:分片、IP伪装、MAC伪装。
Zmap的扩展模块需使用C语言编写,官方提供了两个扩展模块用于获取Banner。
banner-grab-tcp
原理是向扫描发现的IP进行二次发包抓取Banner,二次发包的内容需要自定义。
forge-socket
功能与前者一样,但需要先安装驱动。该模块以底层驱动方式,效率更高。
除了以上两个扩展模块,用户也可以结合需求自行编写。
Nmap有强大的脚本引擎框架,用户可以使用Lua语言编写扩展。目前官方提供了400多个扩展脚本,用于增强基础功能和扩展更多功能,如漏洞检测、口令爆破等。在扫描命令中使用—script=scriptname调用即可。
三种扫描工具在功能上各有长短,本文针对其最基本的端口扫描、主机发现功能进行了实验对比。
操作系统:CentOS 6.5 网络带宽:2000Kbps左右
本文分别编写了三个Python脚本,执行扫描命令。选取来自美欧中非的几个网段,在一次扫描中,针对相同网段和15个常用端口进行扫描,并将结果最后转存到数据库中,对比Zmap、Masscan、Nmap三种工具在相同环境下执行扫描的速度和结果数量。
网段 | Zmap | Masscan | Nmap | |
144.76.183.0/24 | 时间 | 11min43s | 1min27s | 7min39s |
结果数量 | 323 | 315 | 317 | |
125.56.212.0/24 | 时间 | 11min34s | 54s | 7min53s |
结果数量 | 496 | 496 | 496 | |
129.232.174.0/24 | 时间 | 11min24s | 53s | 15min55s |
结果数量 | 416 | 427 | 429 | |
125.71.28.0/24 | 时间 | 11min437s | 50s | 5min42s |
结果数量 | 47 | 47 | 47 | |
125.65.110.0/24 | 时间 | 11min39s | 56s | 4min55s |
结果数量 | 275 | 254 | 275 | |
134.213.61.0/24 | 时间 | 11min46s | 56s | 37min50s |
结果数量 | 167 | 168 | 168 | |
138.186.177.0/24 105.198.227.0/24 | 时间 | 22min34s | 1min29s | 2h18min47s |
结果数量 | 363 | 183 | 368 |
时间方面,Zmap和Masscan扫描耗时与到扫描目标数量成正比,Zmap由于每次只能针对一个端口进行扫描,对于15个端口的情况需要在脚本中发起15次扫描,因此耗时高于Masscan;Nmap的耗时情况并不稳定,怀疑与目标网段网络环境有关。
结果数量方面,在对一个C段进行扫描的时候,三种工具的主机发现数量差距不大;而在对两个C段进行扫描的实验中,Masscan出现了明显的遗漏。
【Masscan Web Interface】可以导入XML文件,让用户方便地搜索扫描结果。
【Rainmap Lite】Web版Nmap,仅需安装Django,就可以建立新的扫描服务器,允许用户从他们的手机/平板电脑/网络浏览器启动Nmap扫描。
【Dracnmap】将Nmap复杂的命令进行一定程度的集成与简化,使新用户更加容易上手。
【LazyMap】可以自动进行Nmap扫描,并且能自动生成定制的Nessus策略。
【DNmap】Nmap的分布式版本,采用C/S结构,由服务器接受命令分发到客户端执行扫描。
以上三种扫描工具各有利弊,工具的选取应该结合具体情况决定。Zmap和Masscan采用了无状态的扫描技术,扫描速度非常可观。在信息收集的初级阶段,可以使用Zmap或Masscan进行目标的情势了解,扫描单一端口的情况考虑使用Zmap,而多端口的情况下Masscan则更为快速。在做完初步了解之后,则应该使用功能更加丰富的Nmap进行进一步的详细扫描。