masscan端口扫描工具
去年做内网资产梳理,口扫我用nmap扫一个C段,描工跑了快四十分钟。口扫换成masscan,描工同样的口扫目标,三秒出结果。描工这个差距不是口扫调参能弥补的,是描工两种工具底层设计思路的分野。
masscan最核心的口扫东西就一句话:它自己实现了TCP/IP协议栈。不调用操作系统的描工socket接口,直接构造以太网帧往网卡上发。口扫这意味着它可以绕开内核的描工连接队列、端口状态表、口扫超时重传这些机制,描工按自己的口扫节奏发包收包。nmap受限于操作系统的网络栈,并发连接数一上去就被内核拖住,masscan没这个包袱。
官方的性能数据是每秒发一千万个包,前提是你有足够好的网卡和带宽。实际在千兆环境里跑,我通常设--rate 10000,也就是每秒一万个包,已经比nmap快两个数量级。再往上调要看链路质量,丢包率高了扫描结果反而不准。
安装不复杂。Ubuntu下apt install masscan就行,或者从GitHub拉源码编译。编译需要gcc和make,没有其他依赖,几分钟搞定。
基本用法很直白:
masscan 192.168.1.0/24 -p80,443,8080 --rate 5000 扫整个B段加常用端口:
masscan 10.0.0.0/16 -p0-65535 --rate 50000 --output-format json -o result.json -p0-65535是全端口扫描,配合高rate值,一个B段大概几分钟能扫完。输出格式支持xml、json、list等,json方便后续用脚本处理。
有个参数容易被忽略:--wait。masscan默认发完包就退出,不等所有响应回来。扫大网段时如果不加--wait 5,会丢掉一部分结果。我吃过这个亏,扫完之后发现漏了好几个开放的Redis端口,排查半天才想起来是等待时间不够。
另一个坑是防火墙和IDS。masscan的发包模式太激进,稍微像样点的入侵检测系统都会报警。在客户环境里用之前,最好先确认你有授权,不然可能触发安全设备告警甚至被封IP。我一般会加--source-ip指定一个合法源地址,避免被交换机端口安全策略拦掉。
masscan不负责服务识别。它只告诉你端口开着,跑的是什么服务、什么版本,得靠nmap的-sV去补。常见做法是masscan先快速筛出开放端口,再把结果喂给nmap做深度探测。这样既快又准,比单独用任何一个都合理。
masscan 192.168.1.0/24 -p1-65535 --rate 10000 -oG masscan.txt nmap -sV -iL masscan.txt 上面这个组合我用了很多次,扫一个C段的全端口加版本识别,全程不超过五分钟。
Windows下也能跑,需要装WinPcap或者npcap。不过Windows的网络栈处理高并发包的能力不如Linux,实际速率会打折扣。真要跑大扫描,还是找个Linux机器。
masscan的作者Robert Graham说过一句话,大意是这工具就是为“扫整个互联网”设计的。2013年他确实用masscan扫了全网IPv4的某个端口,几小时就完成了。这种规模的操作在nmap上不可想象。
但快不等于万能。masscan没有操作系统指纹识别,没有脚本引擎,没有服务版本探测。它是一把手术刀,切得快、切得准,但只负责切开。缝合和诊断还得靠别的工具。搞清楚它的边界在哪,比盲目追求扫描速度重要得多。
(责任编辑:时尚)














