Naabu 是 ProjectDiscovery 团队打造的一款现代化端口扫描器,
以 Go 编写,专注于高性能、易集成与工程化流水线使用。
如果说 Nmap 是经典全能型选手、Masscan 是极限速度的代表,
那么 Naabu 则是两者之间“现代化、自动化、可编排”的中间态。
🚀 工具定位
Naabu 通过 SYN/CONNECT/UDP 三种探测方式实现端口扫描,支持:
- DNS 解析与自动去重
- IPv4 / IPv6 混合扫描(实验性)
- 被动端口枚举(Shodan / InternetDB)
- 主机发现与 Nmap 集成
- 多输入(域名 / IP / CIDR / ASN)与多输出格式(JSON / TXT / STDOUT)
⚙️ Naabu 中的关键技术与实现
1️⃣ 并发模型:Goroutine + Worker Pool
Naabu 使用 Go 原生的 goroutine 与通道(channel)模型来驱动大规模扫描任务。
每个探测任务被分配到 worker 池中异步执行,实现“海量任务 → 轻量线程 → 聚合输出”的流程。
2️⃣ 可控速率与并发:令牌桶思路
通过 -rate(速率)与 -c(并发数)参数控制发送速率与线程上限,
底层逻辑类似令牌桶限流机制,防止扫描过快导致丢包或被防护系统拦截。
naabu -list targets.txt -rate 5000 -c 200
💡 实战经验:VPS 通常可用较高 -rate;本地或代理环境建议 <2000。
3️⃣ 探测模式与权限回退
SYN 扫描(需要 root 权限):最快,直接基于原始 TCP 报文。 CONNECT 扫描:在无 root 权限下回退使用。 UDP 扫描:可指定自定义 payload,提高识别精度。
sudo naabu -p 80,443,8080 -host example.com -scan-type syn
4️⃣ DNS 解析与 IP 去重
Naabu 会自动解析输入域名并去重相同 IP,避免重复扫描,提高效率。
echo "a.example.com\nb.example.com" | naabu #若两者解析到相同 IP,则只扫描一次
✨ 这使 Naabu 非常适合在资产发现流水线中处理大量子域名。
5️⃣ 地址洗牌(Shuffle)算法
为减轻单目标压力并规避防御系统,Naabu 在内部对待扫描目标做随机化处理。 类似 Masscan 的“地址混洗算法”,这让扫描流量更分散、更隐蔽。
6️⃣ 被动信息整合(Shodan / InternetDB)
Naabu 可结合 Shodan 与 InternetDB,被动拉取已知端口信息,用于补全扫描结果或加速探测。
naabu -list ips.txt -passive
🔍 “主动扫描 + 被动情报” 的混合策略,使其兼顾速度与覆盖率。
7️⃣ Nmap 无缝集成
Naabu 支持在发现端口后自动调用 Nmap 进行服务识别。
naabu -host target.com -nmap-cli "nmap -sV -p {{port}} {{host}}"
⚙️ Naabu 负责发现开放端口,Nmap 负责识别服务与指纹,是典型的现代化分层扫描架构。
8️⃣ 工程化输出设计
输出可为 JSON、TXT 或 STDOUT,天然支持管道化与自动化处理:
naabu -list targets.txt -json | jq
naabu -list targets.txt -o results.txt
💬 输出设计对后续工具(如 httpx、nuclei)非常友好。
9️⃣ 重试、退避与 Warm-up
Naabu 提供 -retries、-warm-up-time 参数,用于在网络波动时进行重试与预热。 例如在开始扫描前等待几秒,让路由表和 socket 初始化稳定。 naabu -list hosts.txt -retries 2 -warm-up-time 5s
🧠 小结:Naabu 的设计哲学
Naabu 并非追求极限速度(如 Masscan),而是平衡速度、易用性与可集成性。它将端口扫描器从“黑客工具”进化为“自动化资产发现模块”,让安全研究员与蓝队都能在 CI/CD 流水线中优雅地使用。
| 特性 | Nmap | Masscan | Naabu (ProjectDiscovery) |
|---|---|---|---|
| 开发语言 | C | C | Go |
| 探测模式 | SYN/ACK/UDP/Script | SYN Only (极快) | SYN/CONNECT/UDP |
| 优势方向 | 功能全面 | 速度极致 | 工程化 & 自动化集成 |
| 输出格式 | XML/Nmap Script | Binary / JSON | JSON / TXT / STDOUT |
| 与其他工具集成 | 手动调用 | 需自写脚本 | 原生支持 Nmap / httpx / nuclei |