Masscan是一款高速端口扫描工具,具备出色的扫描效率和大规模扫描的能力,支持TCP和UDP协议的扫描,并能够根据用户的需求指定多个目标和端口。同时,Masscan还采用了网络性能优化技术,充分利用操作系统的资源和多核处理能力,实现了卓越的扫描效率和吞吐量。使用Masscan能够帮助用户快速了解目标主机的服务和漏洞情况,并提供灵活的输出格式和报告,方便进一步的分析和处理。
Masscan的特点:
1)高速扫描:Masscan以其高速的扫描能力而著称,号称可以在5分钟内扫描整个互联网,从一台机器每秒传输1000万个数据包。
2)绕过限制:Masscan绕过操作系统的网络堆栈限制,直接发送原始数据包,提高扫描效率,并允许更多的自定义扫描选项。
3)异步发送:通过异步发送数据包,Masscan能够同时发送多个数据包,实现并发扫描,进一步加快扫描速度。
4)灵活的输出格式:Masscan支持多种输出格式,包括文本、XML和JSON,方便结果分析和后续处理。
Masscan是由Robert David Graham开发的网络端口扫描工具,其技术原理基于异步传输和自定义的TCP/IP协议栈。相比传统的端口扫描工具,Masscan采用并行异步传输的方式,充分利用现代计算机的多核处理能力和高速网络接口,使得扫描速度大幅提升。
为了实现更高的扫描性能,Masscan采用了自定义的TCP/IP协议栈。相比使用操作系统提供的标准套接字接口,自定义协议栈允许更直接的数据包处理和更灵活的配置,Masscan可直接操作底层网络层,绕过操作系统的限制和缺陷,从而显著减少了系统调用的开销,并提高了扫描效率。
为了更好的理解,首先先来复习下正常的TCP三次握手建立链接的过程:
图1 TCP的三路握手
1)客户端发送SYN标志位为1,seq为x的包给服务器端,发送完毕之后客户端进入SYN_SEND状态。
2)服务器端发回确认包ACK应答,回应一个SYN(seq=y)ACK(ack=x+1)报文,发送完毕,服务器端进入SYN_RCVD状态。
3)客户端收到道服务器端回应的SYN报文,回应一个ACK(ack=y+1)报文,发送完毕后,客户端进入ESTABLISHED状态,当服务器端接收到这个包时,也进入ESTABLISHED状态,开始数据传输。
与传统的TCP三次握手相比,Masscan自定义TCP握手过程只需要两个数据包,不建立一个完全的TCP连接,而是首先发送SYN数据包到目标端口,然后等待接收。如果接收到SYN-ACK包,则说明该端口是开放的,此时发送一个RST结束建立过程即可,否则,若目标返回RST,则端口不开放。如下图所示:
图2 Masscan半开放TCP扫描流程
同时,Masscan的自定义协议栈使用了特定的数据包格式。为了实现快速扫描,Masscan使用了非常紧凑的数据包格式,减少了数据包的大小和数量,从而减少了网络传输的开销。这样可以在单位时间内发送更多的数据包,提高扫描速度。
Masscan使用异步传输技术,允许同时发送多个数据包而无需等待前一个数据包的响应。这种并发传输方式极大地提高了扫描效率,使得Masscan能够以惊人的速度处理大量目标主机。
一般情况下进行端口扫描,通过传统的TCP握手过程,需要进行三次握手来建立连接:客户端发送SYN数据包,服务器返回SYN+ACK数据包,最后客户端发送ACK数据包。这样的握手过程相对较慢,一台机器就算把65536个端口全部用来扫描速度也不快,不适合高速扫描。
Masscan的半开放扫描方式,不需要等待建立链接,通过驱动不断对目标发包,服务器返回包经过驱动被接受,Masscan根据返回包携带的信息判断来源的IP和端口,不需要通过端口到端口建立完整的链接,这样发出请求后,不再阻塞等待,而是接受到包之后,通知另外的程序判断来源,充分利用计算机多核处理能力和高速网络接口。
同时Masscan的自定义协议栈允许并行处理多个数据包的响应。使用多线程的方式来实现异步扫描。它将扫描任务划分为多个子任务,并由多个线程并行执行这些子任务。每个线程负责发送和接收数据包,并在数据包返回时进行处理。通过多线程的方式,Masscan能够同时发送和处理大量数据包,从而极大地提高了扫描效率。
Masscan以惊人的速度进行扫描,能够在数分钟内扫描大量ip和端口。这使得Masscan成为大规模网络扫描和漏洞探测的理想选择。但是需要注意的是,如果发包量要超过20万/秒,网卡要求10Gbps。除此之外,还需要PF_RING ZC驱动。
通过--rate可以设置扫描速度在虚拟机上测试环境中,不到1Gbps的带宽条件下,扫描速度为16万/秒的发包率。
Masscan支持多种扫描模式,包括TCP和UDP端口扫描,以及SCTP和ICMP扫描。用户可以根据需要选择合适的扫描模式进行目标主机的扫描。
1)扫描TCP端口:
使用 -p 参数指定要扫描的TCP端口范围,例如:
Masscan -p1-65535 192.168.0.0/16 #扫描192.168.0.0/16网段内所有的TCP端口。
2)扫描UDP端口:
使用 -pU 参数指定要扫描的UDP端口范围,例如:
Masscan -pU:1-65535 192.168.0.0/16 #扫描192.168.0.0/16网段内所有的UDP端口。
3)扫描SCTP端口:
使用 -pS 参数指定要扫描的SCTP端口范围,例如:
Masscan -pS:1-65535 192.168.0.0/16 #扫描192.168.0.0/16网段内所有的SCTP端口。
4)扫描ICMP:
使用 -pI 参数指定要扫描的ICMP类型范围,例如:
Masscan -pI:8-0 192.168.0.0/16 #扫描192.168.0.0/16网段内所有的ICMP类型。
5)扫描ACK、SYN、FIN等标志位:
使用 -pA 参数指定要扫描的标志位类型范围,例如:
Masscan -pA:SAF 192.168.0.0/16 #扫描192.168.0.0/16网段内所有带有SYN、ACK和FIN标志位的数据包。
6)扫描指定端口和协议:
可以同时指定多个协议和端口,例如:
Masscan -p80,443,8080 -pU:53 192.168.0.0/16 #同时扫描TCP端口80、443和8080,以及UDP端口53。
Masscan默认情况下只会扫描TCP端口,如果需要扫描其他协议的端口,则需要使用相应的参数进行指定。同时,使用Masscan进行端口扫描可能会对网络造成一定的负载。
Masscan允许用户灵活地配置扫描参数,包括目标端口范围、扫描速率、数据包大小等。用户可以根据具体情况进行优化,以获得最佳的扫描性能和效果。
常见的扫描参数配置:
1)扫描目标设置:
-iL <file>:从文件中读取要扫描的目标列表。
<IP range>:直接指定要扫描的IP地址范围。
2)速率和超时设置:
--rate <packets per second>:设置扫描速率,即每秒发送的数据包数量。
--timeout <time>:设置每个端口的扫描超时时间。
3)IP和端口过滤:
--exclude <IP range>:排除特定的IP地址范围,不进行扫描。
--excludefile <file>:从文件中读取要排除的IP地址列表。
--banners:获取开放端口的服务banner信息。
4)输出格式
-oX filename :输出到filename的XML。
-oG filename :输出到filename在的grepable格式。
-oJ filename :输出到filename在JSON格式。
5)其他设置:
randomize-hosts:随机扫描目标IP,增加扫描的随机性。
--nmap:生成与Nmap相似的输出格式。
--rotate:使用多个源IP地址进行扫描。
--shard <total shards>/<this shard>:将扫描任务分割为多个片段,同时运行多个Masscan实例
如果不想输入命令,可以通过创建配置文件,然后用加载配置文件的方式运行。配置文件的内容如下所示:
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支持在多种操作系统平台上运行,包括linux、windows和macOS等。这使得用户能够在不同环境下灵活地使用Masscan进行端口扫描。
网络端口扫描在网络安全评估和漏洞探测中扮演着关键角色。目前常用的扫描工具有Masscan、Nmap和Zmap,它们各自有着独特的特点和优势:
特点 |
Masscan |
Nmap |
Zmap |
扫描 速度 |
极快,可以快速扫描整个互联网 |
快速,但相对Masscan较慢 |
快于Nmap,但仍稍逊于Masscan |
支持的协议 |
TCP、UDP、SCTP、ICMP(部分类型) |
TCP、UDP、ICMP、SCTP、ARP等多种协议 |
TCP、UDP、ICMP |
灵活性和定制性 |
参数选项较少,用于快速扫描 |
提供丰富的参数选项,可定制化扫描任务 |
灵活的参数选项,支持定制化扫描任务 |
平台支持 |
主要支持Linux和macOS,有Windows版本 |
跨平台,支持Windows、Linux、macOS等 |
跨平台,支持Windows、Linux、macOS等 |
社区和支持 |
相对较小的用户社区 |
庞大的用户社区和活跃的开发团队 |
庞大的用户社区和活跃的开发团队 |
用途 |
适用于快速互联网规模的资产发现和漏洞探测 |
适用于深入的目标扫描和漏洞评估 |
适用于大规模的互联网扫描 |
以上三种扫描工具各有利弊,工具的选取应该结合具体情况决定,通常情况下需要几种工具结合使用。
Zmap和Masscan采用了无状态的扫描技术,扫描速度非常可观。在信息收集的初级阶段,可以使用Zmap或Masscan进行目标的情势了解;
扫描单一端口的情况考虑使用Zmap,而多端口的情况下Masscan则更为快速。
在做完初步了解之后,则应该使用功能更加丰富的Nmap进行进一步的详细扫描。
Masscan是一款在大规模端口扫描领域具有独特优势的工具,它的高速和灵活性使得它成为网络安全评估和漏洞探测中不可或缺的利器。然而,在使用Masscan进行扫描时,我们必须时刻牢记合法授权和合规性,以确保其在维护网络安全的同时不会对互联网造成不利影响。