
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>