一文了解端口扫描工具——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三次握手建立链接的过程:

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

文章插图
图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,则端口不开放 。如下图所示:
一文了解端口扫描工具——Masscan

文章插图
图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驱动 。


推荐阅读