Masscan 号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网

安装配置

Kali Linux 自带该工具

编译

在 Debian/Ubuntu 系统中,编译命令如下:

1
2
3
4
$ apt install git gcc make libpcap-dev -y
$ git clone https://github.com/robertdavidgraham/masscan
$ cd masscan
$ make -j

注:编译完毕后的可执行程序在 masscan/bin 中

自我测试

当编译完成后可以测试一下是否成功

1
2
3
$ make regress
bin/masscan --regress
selftest: success!

使用方法

基本端口扫描

使用方法类似于 nmap,扫描制定网段范围的指定端口

1
$ masscan -p80,8000-8100 172.19.28.1/23

这条命令将完成如下工作:

  1. 扫描 172.19.28.1 - 172.19.29.254 子网
  2. 扫描端口 80 和 8000 - 8100 范围的端口
  3. 打印结果到标准输出,也可以重定向到一个文件

也可以使用 --echo 将当前的配置输出到一个配置文件,利用 -c 来指定配置文件进行扫描

1
2
$ masscan -p80,8000-8100 172.19.28.1/23 --echo > xxx.conf
$ masscan -c xxx.conf

扫描全网

你可以对整个互联网发起扫描,使用的命令如下:

1
$ masscan 0.0.0.0/0 -p0-65535

有时候对这个互联网扫描可能会对你造成一些麻烦,你可能会被请去喝茶。所以,我们可以通过设置黑名单来让扫描器扫描时忽略一些网段。语法如下:

1
$ masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt

你也可以把扫描的结果不输出到命令行,输出到指定文件中:

1
$ masscan 0.0.0.0/0 -p0-65535 -oX scan.xml

这条命令把扫描过节保存在一个 XML 文件中
当前的扫描器使用的是默认速度 100 包一秒,如果是扫描全网的话,需要提高速度:

1
$ masscan 0.0.0.0/0 -p0-65535 --rate 100000

这条命令将以每秒十万包的速率进行扫描

输出格式

主要有五种输出格式

1
2
3
4
5
Binary 格式:masscan 内置格式
XML 格式:使用 -oX <文件名> 进行指定
Grepable nmap 格式:使用 -oG <文件名> 进行指定
Json 格式:使用 -oJ <文件名> 进行指定
简单列表,每行一个主机端口对:使用 -oL <文件名> 进行指定

传输速度

masscan 在发包时速度非常快,在 Windows 中,它的发包速度可以达到每秒 30 万包;在 Linux 中,速度可以达到每秒 160 万包
masscan 在扫描时会随机选择目标 IP,不会对远程主机造成压力

详细参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<ip/range> IP地址范围,有三种有效格式,1、单独的IPv4地址 2、类似"10.0.0.1-10.0.0.233"的范围地址 3、CIDR地址 类似于"0.0.0.0/0",多个目标可以用都好隔开
-p <ports,--ports <ports>> 指定端口进行扫描
--banners 获取banner信息,支持少量的协议
--rate <packets-per-second> 指定发包的速率
-c <filename>, --conf <filename> 读取配置文件进行扫描
--echo 将当前的配置重定向到一个配置文件中
-e <ifname> , --adapter <ifname> 指定用来发包的网卡接口名称
--adapter-ip <ip-address> 指定发包的IP地址
--adapter-port <port> 指定发包的源端口
--adapter-mac <mac-address> 指定发包的源MAC地址
--router-mac <mac address> 指定网关的MAC地址
--exclude <ip/range> IP地址范围黑名单,防止masscan扫描
--excludefile <filename> 指定IP地址范围黑名单文件
--includefile,-iL <filename> 读取一个范围列表进行扫描
--ping 扫描应该包含ICMP回应请求
--append-output 以附加的形式输出到文件
--iflist 列出可用的网络接口,然后退出
--retries 发送重试的次数,以1秒为间隔
--nmap 打印与nmap兼容的相关信息
--http-user-agent <user-agent> 设置user-agent字段的值
--show [open,close] 告诉要显示的端口状态,默认是显示开放端口
--noshow [open,close] 禁用端口状态显示
--pcap <filename> 将接收到的数据包以libpcap格式存储
--regress 运行回归测试,测试扫描器是否正常运行
--ttl <num> 指定传出数据包的TTL值,默认为255
--wait <seconds> 指定发送完包之后的等待时间,默认为10秒
--offline 没有实际的发包,主要用来测试开销
-sL 不执行扫描,主要是生成一个随机地址列表
--readscan <binary-files> 读取从-oB生成的二进制文件,可以转化为XML或者JSON格式.
--connection-timeout <secs> 抓取banners时指定保持TCP连接的最大秒数,默认是30秒。