一文了解端口扫描工具——Masscan

一、文解Masscan介绍
Masscan是端口一款高速端口扫描工具,具备出色的扫描扫描效率和大规模扫描的能力 ,支持TCP和UDP协议的工具扫描 ,并能够根据用户的文解需求指定多个目标和端口。同时,端口Masscan还采用了网络性能优化技术,扫描充分利用操作系统的工具资源和多核处理能力 ,实现了卓越的文解扫描效率和吞吐量 。使用Masscan能够帮助用户快速了解目标主机的服务器租用端口服务和漏洞情况,并提供灵活的扫描输出格式和报告 ,方便进一步的工具分析和处理 。
Masscan的文解特点:
1)高速扫描 :Masscan以其高速的扫描能力而著称,号称可以在5分钟内扫描整个互联网 ,端口从一台机器每秒传输1000万个数据包。扫描
2)绕过限制:Masscan绕过操作系统的网络堆栈限制,直接发送原始数据包,提高扫描效率 ,并允许更多的自定义扫描选项 。云计算
3)异步发送:通过异步发送数据包,Masscan能够同时发送多个数据包,实现并发扫描 ,进一步加快扫描速度 。
4)灵活的输出格式:Masscan支持多种输出格式,包括文本、XML和JSON,方便结果分析和后续处理 。
二、Masscan的技术原理
Masscan是由Robert David Graham开发的网络端口扫描工具 ,其技术原理基于异步传输和自定义的TCP/IP协议栈 。亿华云相比传统的端口扫描工具,Masscan采用并行异步传输的方式,充分利用现代计算机的多核处理能力和高速网络接口,使得扫描速度大幅提升。
2.1 自定义TCP/IP协议栈
为了实现更高的扫描性能,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使用了非常紧凑的数据包格式,减少了数据包的大小和数量 ,从而减少了网络传输的开销。这样可以在单位时间内发送更多的数据包,提高扫描速度 。
2.2 异步传输
Masscan使用异步传输技术,允许同时发送多个数据包而无需等待前一个数据包的响应。这种并发传输方式极大地提高了扫描效率 ,使得Masscan能够以惊人的速度处理大量目标主机 。
一般情况下进行端口扫描,通过传统的TCP握手过程,需要进行三次握手来建立连接:客户端发送SYN数据包,服务器返回SYN+ACK数据包 ,最后客户端发送ACK数据包 。这样的握手过程相对较慢,一台机器就算把65536个端口全部用来扫描速度也不快 ,不适合高速扫描 。
Masscan的半开放扫描方式,不需要等待建立链接,通过驱动不断对目标发包,服务器返回包经过驱动被接受 ,Masscan根据返回包携带的信息判断来源的IP和端口,不需要通过端口到端口建立完整的链接 ,这样发出请求后 ,不再阻塞等待 ,而是接受到包之后,通知另外的程序判断来源,充分利用计算机多核处理能力和高速网络接口。
同时Masscan的自定义协议栈允许并行处理多个数据包的响应 。使用多线程的方式来实现异步扫描 。它将扫描任务划分为多个子任务,并由多个线程并行执行这些子任务。每个线程负责发送和接收数据包,并在数据包返回时进行处理 。通过多线程的方式 ,Masscan能够同时发送和处理大量数据包 ,从而极大地提高了扫描效率。
三、Masscan使用
3.1 高速扫描
Masscan以惊人的速度进行扫描,能够在数分钟内扫描大量ip和端口。这使得Masscan成为大规模网络扫描和漏洞探测的理想选择。但是需要注意的是 ,如果发包量要超过20万/秒 ,网卡要求10Gbps。除此之外 ,还需要PF_RING ZC驱动 。
通过--rate可以设置扫描速度在虚拟机上测试环境中,不到1Gbps的带宽条件下,扫描速度为16万/秒的发包率。

3.2 支持多种协议
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进行端口扫描可能会对网络造成一定的负载。
3.3 灵活的配置
Masscan允许用户灵活地配置扫描参数 ,包括目标端口范围、扫描速率 、数据包大小等 。用户可以根据具体情况进行优化 ,以获得最佳的扫描性能和效果 。
常见的扫描参数配置:
1)扫描目标设置:
-iL <file> :从文件中读取要扫描的目标列表。
<IP range>:直接指定要扫描的IP地址范围 。
2)速率和超时设置:
--rate <packets per second>