masscan 扫描


一、什么是 Masscan

Masscan 是一个极快的端口扫描器(通过自定义大量并发发送 TCP/UDP 包实现高吞吐)。它适合做大范围端口/资产发现,但不做服务版本探测(或仅有实验性 banners 功能),通常与 Nmap 配合使用:先 masscan 快速发现开放端口,再用 nmap 做深度检测。


二、安装

常见方法(选一个):

  • Debian/Ubuntu:

sudo apt update
sudo apt install masscan

(有时仓库版本旧,可从源码编译)

  • macOS(Homebrew):

brew install masscan
  • 从源码编译(当系统包旧或无包时):

git clone https://github.com/robertdavidgraham/masscan.git
cd masscan
make
# 二进制在 ./bin/masscan
sudo make install   # 可选:安装到 /usr/local/bin

三、基本用法与示例

说明:--rate 的单位是 每秒发出的数据包数 (pps)(调整大小对扫描速度和网络影响最大)。

  1. 扫描单个 IP、单端口:

sudo masscan -p80 192.168.1.10 --rate=1000
  1. 扫描端口范围:

sudo masscan -p1-65535 10.0.0.0/24 --rate=5000
  1. 扫描常见端口集合(举例:80,443,22):

sudo masscan -p22,80,443 203.0.113.0/24 --rate=2000
  1. 扫描全网(极危险、极容易被封/被举报 —— 强烈不要随意对 Internet 全网扫):

sudo masscan -p1-65535 0.0.0.0/0 --rate=100000

仅作示例;实际投放前必须先获授权、做流量控制、并通知网络提供方)

  1. 输出保存(常见:XML/JSON/文本):

sudo masscan -p80 192.168.1.0/24 --rate=1000 -oX masscan_result.xml

注意:不同版本支持的输出格式可能不同,请运行 masscan --help 看你那版支持哪些 -o 格式。

  1. 跳过主机发现直接扫描(masscan 默认会直接发送探测包):
    masscan 通常直接发包,不像 nmap 必须先 ping。若需要随机化扫描顺序可加:

--randomize-hosts

四、速率(--rate)与网络影响

  • --rate 决定速度。值越大越快,但会对扫描发起端、路由器、对端及中间 IDS/IPS 造成冲击(丢包、连接中断、流量异常报警、被封 IP)。

  • 经验值(仅参考):

    • 局域网内:可以尝试 1000–10000 pps(视主机/交换机性能)

    • 跨广域网或互联网:建议非常保守(几十到几百 pps),并与上游/对端协商

  • 做扫描前先做小范围测试(比如先在 /24 内一台机器上逐步调高 --rate),观察丢包、CPU 使用与网络设备压力。


五、并行化与分片(扫描大网段)

Masscan 支持把待扫空间分片(shard),方便多台机并行分配任务:

# 将整个目标集分成 10 份,这台机器负责第 1 份
sudo masscan --shard 1/10 -p80 192.0.2.0/24 --rate=1000
# 另一台用 --shard 2/10,如此类推

用分片可以把超大范围的任务分给 N 台机器并行,互不重复。


六、排除(exclude)与排除文件

  • 排除单个 IP 或网段:

--exclude 192.168.1.5
--exclude 10.0.0.0/8
  • 排除文件(多行 IP/CIDR):

--excludefile exclude_list.txt

这在批量扫大网段且要避开某些网段时非常有用。


七、Banner 与服务信息

  • Masscan 的主要目标是发现 open端口。它有实验性的 --banners(或 --banners 相关选项),但功能和稳定性不如 Nmap 的 -sV。实战中常见流程:

    1. masscan 快速发现开放端口并输出结果文件;

    2. 用脚本把结果转换成 nmap 可以读取的 IP 列表;

    3. 用 nmap 对这些 IP/端口做 -sV--script 等深度探测。

示例:先 masscan 找到开放端口并保存为文本(示例格式,视你的 masscan 版本):

sudo masscan -p80,443 10.0.0.0/8 --rate=20000 -oL masscan.out

然后把 masscan.out 处理成 nmap 的目标列表并执行 nmap(下面为示例思路,字段提取要按你输出格式调整):

# 假设 masscan.out 每行包含 IP 地址(需根据实际输出调整提取命令)
awk '{print $6}' masscan.out | sort -u > targets.txt
nmap -sV -p 80,443 -iL targets.txt -oA nmap_after_masscan

注意:masscan 的原始文本输出格式可能需要用 grep/awk/jq(JSON 输出)来解析,具体命令依版本而异。


八、常见实战示例(完整)

  1. 局域网快速查 1–1000 端口,保存 XML:

sudo masscan -p1-1000 192.168.0.0/24 --rate=5000 -oX scan_local.xml
  1. 对一个候选 IP 列表并行分片(10 台机器):

sudo masscan --shard 3/10 -p80,443,22 203.0.113.0/16 --rate=20000 -oJ out3.json
  1. 避免检测过载,逐步增加速率(测试):

# 从 100pps 开始逐步上调,观察网络和目标响应
sudo masscan -p80 198.51.100.0/24 --rate=100
sudo masscan -p80 198.51.100.0/24 --rate=500

九、与 Nmap 协同(常见工作流)

  1. Masscan 快速发现开放端口(例如:全段只保留 open 的 IP:port);

  2. 提取 IP 列表与端口信息,生成 Nmap 输入文件;

  3. 用 Nmap 做服务识别、脚本扫描、OS 探测等:

# nmap 对 masscan 结果做版本探测示例
nmap -sV -p <ports> -iL masscan_targets.txt -oA nmap_after_masscan

这种方法兼顾速度(masscan)和准确性/可用性(nmap)。


十、日志、输出与后处理建议

  • 建议把结果保存为机器可解析格式(JSON / XML),便于用脚本/ELK/Splunk 处理。

  • 对大规模扫描,分批跑、分片并记录扫描时间戳,便于事后复盘与去重。

  • 使用版本控制或数据库保存扫描快照(便于比较资产变动)。


十一、常见陷阱与注意事项

  1. 合法性/合规性:对不属于你的 IP/网络进行端口扫描有法律/合规风险。务必取得目标所有者书面授权。

  2. 网络设备压力:高 --rate 会让交换机/防火墙/IDS/IPS 产生大量日志或崩溃,先在测试网演练。

  3. 丢包造成假阴性:高并发与路径丢包会漏掉开放端口——可通过降低速率或多次重扫弥补。

  4. 时间与路由:跨广域网时,短时间大量包可能触发 ISP 限流/封禁。

  5. 数据格式差异:masscan 不同版本的输出格式可能不同,写自动化脚本前请先在你环境跑一次并确认输出样式。

  6. 服务探测能力有限:masscan 不是做 -sV 的工具,探测服务及漏洞要交给 nmap/Nessus 等专业工具。


十二、示例小脚本(把 masscan JSON 输出里的 IP 列表导给 nmap)

注:下面只是示例框架,实际需要按 masscan 版本的 JSON 字段做调整(先看 out.json 的结构)。

# 假设 masscan 支持 JSON 输出:-oJ out.json
sudo masscan -p80,443 10.0.0.0/16 --rate=20000 -oJ out.json

# 用 jq 提取 IP 列表(示例字段名,按实际 JSON 修改)
jq -r '.[].ip' out.json | sort -u > targets.txt

# nmap 对这些 IP 做版本探测
nmap -sV -p80,443 -iL targets.txt -oA nmap_results

posted @ 2025-10-17 11:12  Alonones  阅读(5)  评论(0)    收藏  举报