1.简介
masscan相对于nmap没有这么大而全,但是依然是比较流行的端口扫描工具。它比nmap这些扫描器更快,而且masscan更加灵活,它允许自定义任意的地址范围和端口范围。
masscan的发包速度非常快,在windows中,它的发包速度可以达到每秒30万包;在Linux中,速度可以达到每秒160万。masscan在扫描时会随机选择目标IP,所以不会对远程的主机造成压力。默认情况下,masscan的发包速度为每秒100包,为了提高速度,可以设置为 --rate 100000。
2.常用命令
- IP地址范围,有三种有效格式:
- 1、单独的IPv4地址
- 2、类似"10.0.0.1-10.0.0.233"的范围地址
- 3、CIDR地址类似于"0.0.0.0/0",多个目标可以用逗号隔开
- -p <ports,–ports > 指定端口进行扫描
- –banners 获取banner信息,支持少量的协议
- –rate 指定发包的速率
- -c , --conf 读取配置文件进行扫描
- –echo将当前的配置重定向到一个配置文件中
- -e , --adapter 指定用来发包的网卡接口名称
- –adapter-ip 指定发包的IP地址
- –adapter-port 指定发包的源端口
- –adapter-mac 指定发包的源MAC地址
- –router-mac 指定网关的MAC地址
- –exclude <ip/range>IP地址范围黑名单,防止masscan扫描
- –excludefile 指定IP地址范围黑名单文件
- –includefile,-iL 读取一个范围列表进行扫描
- –ping扫描应该包含ICMP回应请求
- –append-output 以附加的形式输出到文件
- –iflist 列出可用的网络接口,然后退出–retries 发送重试的次数,以1秒为间隔
- –nmap打印与nmap兼容的相关信息
- –http-user-agent 设置user-agent字段的值
- –show[open,close] 告诉要显示的端口状态,默认是显示开放端口
- –noshow [open,close] 禁用端口状态显示
- –pcap 将接收到的数据包以libpcap格式存储
- –regress 运行回归测试,测试扫描器是否正常运行
- –ttl 指定传出数据包的TTL值,默认为255
- –wait 指定发送完包之后的等待时间,默认为10秒
- –offline 没有实际的发包,主要用来测试开销
- -sL 不执行扫描,主要是生成一个随机地址列表
- –readscan 读取从-oB生成的二进制文件,可以转化为XML或者JSON格式
- –connection-timeout 抓取banners时指定保持TCP连接的最大秒数,默认是30秒。
3.实例
- 扫描指定网段范围的指定端口
使用方法类似于nmap,扫描指定网段范围的指定端口
masscan -p80,8080-8100 10.0.0.0/8
#可以使用 --echo 将当前的配置输出到一个配置文件,利用 -c 来制定配置文件进行扫描:
masscan -p80,8000-8100 10.0.0.0/8 --echo > scan.conf
masscan -c scan.conf --rate 1000
- 获取Banner
masscan不仅仅只是测试端口是否开放,它还能在完成TCP连接的同时获取目标应用程序的Banner信息。
masscan 10.0.0.0/8 -p80 --banners --source-ip x.x.x.x
- 如果不想输入命令,可以通过创建配置文件,然后用加载配置文件的方式运行。配置文件的内容如下所示:
rate = 100000
output-format = xml
output-status = all
output-filename = scan.xml
ports = 0-65535
range = 0.0.0.0-255.255.255.255
excludefile = exclude.txt
扫描时,用 -c 加载配置文件 即可完成扫描。
- 结果输出
默认情况下,masscan会生成相当大的文本文件,但是很容易将它们转换为任何其他格式。支持五种输出格式:
- xml:只需使用参数-oX。或者,使用参数–output-format xml和–output-filename 。
- 二进制:这是masscan内置格式。它产生的文件要小得多,因此,当我扫描Internet时,磁盘不会填满。但是,它们需要解析。命令行选项–readscan将读取二进制扫描文件。–readscan与该-oX选项一起使用将生成结果文件的XML版本。
- grepable:这是Nmap -oG输出的实现,可以通过命令行工具轻松地对其进行解析。只需使用参数-oG。或者,使用参数–output-format grepable和 --output-filename 。
- json:这会将结果保存为JSON格式。只需使用参数-oJ。或者,使用参数–output-format json和 --output-filename 。
- list:这是一个简单的列表,每行一个主机和端口对。只需使用参数-oL。或者,使用参数–output-format list和–output-filename 。格式为:
<port state> <protocol> <port number> <IP address> <POSIX timestamp>
open tcp 80 XXX.XXX.XXX.XXX 1390380064