masscan
简介
Masscan,是 robertdavidgraham 在 Github 上开源的端口扫描工具,项目代码位于 https://github.com/robertdavidgraham/masscan。
Masscan 性能优越,极限速度可以从单机每秒发送1000万个数据包。Masscan号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。
Masscan 针对 TCP 端口进行扫描,使用 SYN 扫描的方式,不建立一个完全的 TCP 连接,而是首先发送一个 SYN 数据包到目标端口,然后等待接收。如果接收到 SYN-ACK 包,则说明该端口是开放的,此时发送一个 RST 结束建立过程即可;否则,若目标返回 RST,则端口不开放。
Masscan 在其内部使用异步传输,更为灵活,允许任意的IP和端口范围,并使用了随机化的目标扫描,使得对于非连续段IP的扫描更加高效,解决了范围切分带来的性能损失问题,且降低了对于目标网络的负载压力,提高了自由度和性能。
masscan 和 nmap
- Masscan 使用了与另一个著名的扫描工具 nmap 类似的命令行参数,方便进行上手使用。
- Masscan 的扫描结果类似于 nmap。在内部,它更像 scanrand, unicornscan, and ZMap,采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。而且 masscan 更加灵活,它允许自定义任意的地址范和端口范围。
安装配置
Debian/Ubuntu
1 |
|
注:安装完成后的可执行程序在masscan/bin中
PF_RING
如果您想获得超过两百万每秒的速度,您需要一个英特尔10-Gbps网卡和一个被称为PF_RING DNA(http://www.ntop.org/products/pf_ring/)的特殊驱动程序。masscan 使用 PF_RING 不要进行重建,你只需要建立以下组件即可:
1 |
|
当masscan检测到网卡为dna0时,将自动切换为PF_RING模式
测试
当安装完成是可以测试一下是否安装成功:
1 |
|
使用方法
使用方法类似于 nmap,扫描指定网段范围的指定端口
1 |
|
Masscan 提供了echo 选项,可以把当前命令的配置保存下来,然后在其他 masscan 命令直接引用
1 |
|
Banner 获取
masscan 不仅仅只是测试端口是否开放,它还能在完成 TCP 连接的同时获取目标应用程序的 Banner 信息(–banners选项值旗标,或者指纹)。
1 |
|
您可以通过配置防火墙来防止 masscan 的返回不了信息的情况
Linux 可以在这样配置
1 |
|
MAC OS X 和 BSD 可以这样配置
1 |
|
扫描时忽略一些网段
我们可以通过设置黑名单来让扫描器扫描时忽略一些网段。语法如下:
1 |
|
结果输出到文件
你也可以把扫描的结果不输出到命令行,输出到指定文件中
1 |
|
这条命令把扫描的结果保存在一个XML文件中
提高发包速率
当前的扫描器使用的是默认的速率100包/秒,如果是扫描全网的话,需要提高速度。
1 |
|
masscan 的发包速度非常快,在 windows 中,它的发包速度可以达到每秒 30 万包;在 Linux 中,速度可以达到每秒 160 万。masscan 在扫描时会随机选择目标 IP,所以不会对远程的主机造成压力。
我们注意到 zmap 和 masscan 都有一个控制发包速率的参数,为什么需要这个参数呢?不是越高越好吗?不是的,这个参数的设置直接影响漏报。
一般家用 adsl 的上行速度在 100kb/s-300kb/s 之间,以互联网最小包 60byte 计算,100kb/s=1746 pps,也就是说每秒发送数据包约2000 个,超出就容易丢包漏报。通过这个公式不难得出在一个家庭 adsl 环境下且保证准确度,用 zmap 扫描全部互联网需要255*255*255*255/2000/3600/24=24天
。
使用配置文件
上述的这些命令可能输入起来有点麻烦,我们可以通过创建配置文件,然后用加载配置文件的方式运行。配置文件的内容如下所示:
1 |
|
扫描时,用 -c 加载配置文件,这样的话,你进行重复扫描会省很多的力气。
结果输出
主要有5种输出的格式:
- XML 默认格式。使用
-oX <filename>
或者使用-output-format xml
和-output-filename <filename>
进行指定 - binary masscan 内置格式。
masscan --open --banners --readscan output.txt -oX 2.txt
打开显示模式,读取 output.txt 中的数据,并以 xml 的格式写到 2.txt 中 - grepable nmap 格式。使用
-oG <filename>
或者-output-format grepable
和-output-filename <filename>
进行指定 - json 使用。
-oJ <filename>
或者-output-format json
和-output-filename <filename>
进行指定 - list 简单的列表,每行一个主机端口对。使用
-oL <filename>
或者-output-format list
和-output-filename <filename>
进行指定
详细参数
1 |
|