版本: 1.0.0 状态: 生产就绪 平台: Linux x86_64 (AMD64) 语言: Rust 1.90+
English Documentation | 中文用户手册
致敬: RustNmap 向 Nmap 致敬 -- 作为网络扫描领域的黄金标准,Nmap 已引领该领域超过二十年。Nmap 的设计理念与实现深深启发了本项目。
RustNmap 是一个使用 Rust 编写的现代高性能网络扫描工具,在利用 Rust 的内存安全和异步能力的同时,争取提供与 Nmap 100% 的功能对等。开发过程中,我们广泛参考了 Nmap 的设计(时间引擎、拥塞控制、指纹匹配、NSE 架构等),并持续使用多个实际靶机与 Nmap 进行扫描结果对比验证。
主要特性:
- 12 种扫描类型: SYN、Connect、UDP、FIN、NULL、XMAS、ACK、Maimon、Window、IP 协议、Idle、FTP Bounce
- 服务和操作系统检测: 6000+ 服务探针,5000+ 操作系统签名
- NSE 脚本: 完整的 Lua 5.4 引擎,兼容 Nmap 库
- 5 种输出格式: Normal、XML、JSON、Grepable、Script Kiddie
- 高级规避: 分片、诱饵、欺骗、时间控制
git clone https://github.com/greatwallisme/rust-nmap.git
cd rust-nmap
cargo build --release
sudo ./target/release/rustnmap --help# TCP SYN 扫描 (需要 root)
sudo rustnmap -sS 192.168.1.1
# TCP Connect 扫描 (不需要 root)
rustnmap -sT 192.168.1.1
# 扫描特定端口
sudo rustnmap -p 22,80,443 192.168.1.1
# 服务检测
sudo rustnmap -sV 192.168.1.1
# 操作系统检测
sudo rustnmap -O 192.168.1.1
# 完整激进扫描
sudo rustnmap -A 192.168.1.1RustNmap 将所有必需的 Nmap 数据文件(服务探针、OS 指纹、NSE 脚本等)嵌入到二进制文件中。首次使用前,需将它们提取到 ~/.rustnmap/:
rustnmap init此命令是幂等的 -- 已存在的文件会被跳过。使用 --force 强制覆盖:
rustnmap init --force如果在运行扫描时数据目录不存在,RustNmap 会提示你运行 rustnmap init。
| 文档 | 说明 |
|---|---|
| 用户手册 | 完整的命令参考和使用指南 |
| 用户指南 | 综合扫描教程 |
| 架构 | 系统设计和 crate 结构 |
- 快速参考 - 单页命令速查表
- 选项参考 - 完整 CLI 选项
- 扫描类型 - 详细扫描文档
- 输出格式 - 格式规范
- NSE 脚本 - 脚本指南
- 退出代码 - 错误处理参考
- 环境变量 - 通过环境变量配置
- 配置文件 - 配置文件格式
# 单个 IP、CIDR、范围、主机名
rustnmap 192.168.1.1
rustnmap 192.168.1.0/24
rustnmap 192.168.1.1-100
rustnmap example.com
# 从文件
rustnmap -iL targets.txtsudo rustnmap -sS 192.168.1.1 # TCP SYN (隐秘)
rustnmap -sT 192.168.1.1 # TCP Connect (无需 root)
sudo rustnmap -sU 192.168.1.1 # UDP
sudo rustnmap -sF 192.168.1.1 # FIN 扫描
sudo rustnmap -sA 192.168.1.1 # ACK (防火墙映射)sudo rustnmap -oN results.nmap 192.168.1.1 # Normal
sudo rustnmap -oX results.xml 192.168.1.1 # XML
sudo rustnmap -oJ results.json 192.168.1.1 # JSON
sudo rustnmap -oG results.gnmap 192.168.1.1 # Grepable
sudo rustnmap -oA results 192.168.1.1 # 所有格式sudo rustnmap -sC 192.168.1.1 # 默认脚本
sudo rustnmap --script http-title 192.168.1.1 # 特定脚本
sudo rustnmap --script "vuln" 192.168.1.1 # 类别
sudo rustnmap --script "http-*" 192.168.1.1 # 模式# 构建
cargo build --release
# 运行测试
cargo test --workspace
# 运行 clippy(零警告要求)
cargo clippy --workspace -- -D warnings
# 格式检查
cargo fmt --all -- --check
# 生成文档
cargo doc --workspace --no-deps --all-features- 内存安全: Rust 所有权防止缓冲区溢出
- 安全并发: 编译时数据竞争预防
- 31 个 unsafe 块(全部为带 SAFETY 注释的 FFI/系统调用)
| Crate | 数量 | 用途 |
|---|---|---|
rustnmap-core |
11 | libc::close、freeifaddrs、ARP/ioctl |
rustnmap-packet (mmap) |
8 | PACKET_MMAP 环形缓冲区、零拷贝 |
rustnmap-scan |
3 | 数据包适配器 FFI |
rustnmap-packet (recvfrom) |
2 | libc::send 原始套接字 |
rustnmap-target |
2 | libc::close、freeifaddrs |
rustnmap-nse |
1 | setrlimit(进程隔离) |
rustnmap-sdk |
1 | libc::geteuid(root 检测) |
| 特性 | RustNmap | Nmap |
|---|---|---|
| 扫描类型 | 12 | 12 |
| 服务检测 | 6000+ 探针 | 6000+ 探针 |
| 操作系统检测 | 5000+ 签名 | 5000+ 签名 |
| NSE 脚本 | 完整 Lua 5.4 | 完整 Lua 5.4 |
| 输出格式 | 5 | 5 |
| 内存安全 | 保证 | 否 |
| 并发 | Async/await | 事件驱动 |
RustNmap 持续使用多个实际靶机与 Nmap 进行扫描结果对比,确保扫描准确性和功能对等。
| 靶机 | 类型 | 用途 |
|---|---|---|
scanme.nmap.org (45.33.32.156) |
公网主机(Nmap 项目) | 默认对比靶机,41 项扫描类型一致性测试 |
153.3.238.0/24 |
公网 /24 网段 | 多目标并行、cwnd 扩展、T0-T5 时间模板 |
| 本地网络 /24 网段 | 私有局域网 | ARP 主机发现、批量准确性、ICMP 探测 |
- 41 项对比测试(rustnmap vs nmap):全部 12 种扫描类型、T0-T5 时间模板、输出格式、规避技术、服务/OS 检测
- 104 项 CLI 验证测试:全部 85 个 CLI 选项,覆盖 12 个类别
- Criterion 基准测试:数据包引擎、扫描引擎、指纹匹配、NSE 热路径
详见 benchmarks/README.md 了解完整测试套件详情、配置及运行方法。
RustNmap 使用 GNU General Public License v3.0 或更高版本 (GPL-3.0-or-later)。
| 组件 | 许可证 |
|---|---|
| RustNmap 源代码 | GPL-3.0-or-later |
| Nmap 指纹数据库 | NPSL(使用时适用) |
RustNmap 使用 Nmap 的指纹数据库(nmap-service-probes、nmap-os-db、nmap-mac-prefixes、nmap-services、nmap-protocols、nmap-rpc),这些数据库基于 Nmap Public Source License (NPSL) 授权。详见 COPYING。
免责声明: 本工具仅用于授权的安全测试。在扫描您不拥有的网络之前,请确保获得适当的授权。