szichedelic/nmapper
GitHub: szichedelic/nmapper
一个用 Rust 编写的高速网络扫描器,集成了主机发现、端口扫描、服务检测、OS 指纹识别和漏洞评估等全面功能。
Stars: 0 | Forks: 0
# nmapper
一个使用 Rust 编写的高速网络映射器,用于主机发现、端口扫描、服务检测、OS 指纹识别和漏洞评估。专为学习网络安全概念而构建。
## 功能特性
- **主机发现**:ICMP ping 扫描、ARP 扫描(本地子网)、TCP ping
- **端口扫描**:TCP SYN(半开)、TCP connect、UDP、FIN、NULL、Xmas
- **服务检测**:使用特定协议探测进行 Banner 抓取(HTTP, SSH, FTP, SMTP, DNS, MQTT, Redis, SMB 等)
- **OS 指纹识别**:TCP/IP 协议栈分析(TTL、窗口大小、DF 位、TCP 选项)
- **TLS 检查**:在类 HTTPS 端口上获取证书主题、颁发者、有效期和 SANs
- **MAC 厂商查询**:通过 IEEE OUI 数据库从 MAC 地址识别设备制造商
- **mDNS/Bonjour 发现**:查找通过组播 DNS 通告服务的设备
- **SSDP/UPnP 发现**:发现媒体设备、智能电视和 IoT 设备
- **漏洞检查**:测试默认凭据(SSH, HTTP, FTP, Telnet, SNMP)和未授权暴露的服务(Redis, MongoDB)
- **被动模式**:仅监听的网络发现,不发送任何探测包
- **监控模式**:持续扫描并在发现新主机、端口打开/关闭时发出警报
- **差异扫描**:将当前结果与之前的扫描进行比较(SQLite 支持)
- **输出**:彩色 CLI 表格、JSON、包含网络图表的独立 HTML 报告
- **速率控制**:计时模板 T0(隐蔽)到 T5(极速),支持可配置的并发
- **隐蔽特性**:端口/主机随机化、延迟抖动、TCP 选项随机化、诱饵扫描、IP 分片、扫描交错
## 系统要求
- Rust 1.70+
- macOS 或 Linux
- Root/sudo 权限(用于原始扫描 (SYN/FIN/NULL/Xmas)、ARP 发现、OS 指纹识别和被动模式)
## 构建
```
cargo build --release
```
编译后的二进制文件位于 `target/release/nmapper`。
## 使用方法
```
# 使用默认设置扫描子网 (ICMP discovery + SYN scan top 100 端口)
sudo nmapper 192.168.1.0/24
# TCP connect scan (无需 root)
nmapper 10.0.0.1 -s connect -p 22,80,443
# 包含 service detection、OS fingerprinting 和 device discovery 的完整扫描
sudo nmapper 192.168.1.0/24 -p common --sV -O --mdns --ssdp -o both
# 包含 vulnerability checks 和 HTML 报告的扫描
sudo nmapper 192.168.1.0/24 --sV --vuln-check -o html --output-file report.html
# 与之前的扫描结果对比以检测变化
sudo nmapper 192.168.1.0/24 --diff
# Passive discovery — 监听而不发送任何探测
sudo nmapper 0.0.0.0 --passive --duration 60
# Watch mode — 持续扫描并在变化时报警
sudo nmapper 192.168.1.0/24 --watch --interval 300
# 扫描端口范围并导出 JSON 文件
sudo nmapper 10.0.0.1 -p 1-1024 --sV -o json --output-file results.json
# 使用 aggressive timing 的快速扫描
sudo nmapper 192.168.1.0/24 -T5 -p 22,80,443
# Stealth FIN scan
sudo nmapper 192.168.1.0/24 -s fin -p 22,80,443
# 带 decoys 和 fragmentation 的 Xmas scan
sudo nmapper 192.168.1.0/24 -s xmas --decoys 10.0.0.1,10.0.0.2 --fragment
# 随机化 TCP fingerprint 并跨主机交错
sudo nmapper 192.168.1.0/24 --randomize-tcp --interleave
# Paranoid stealth scan (自动 jitter + 随机化)
sudo nmapper 10.0.0.0/24 -T0 -s fin -p 22,80,443
```
## 选项
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `-p, --ports` | 端口规格:`22,80,443`、`1-1024` 或 `common` | `common` |
| `-s, --scan-type` | `syn`、`connect`、`udp`、`fin`、`null`、`xmas` | `syn` |
| `-d, --discovery` | `icmp`、`arp`、`tcp` 或 `skip` | `icmp` |
| `-O, --os-detect` | 启用 OS 指纹识别 | 关闭 |
| `--sV` | 启用服务/版本检测 | 关闭 |
| `--mdns` | 启用 mDNS/Bonjour 设备发现 | 关闭 |
| `--ssdp` | 启用 SSDP/UPnP 设备发现 | 关闭 |
| `--vuln-check` | 检查默认凭据和未授权暴露的服务 | 关闭 |
| `--diff` | 将结果与之前的扫描进行对比 | 关闭 |
| `--passive` | 被动发现模式(仅监听) | 关闭 |
| `--duration` | 被动发现的持续时间(秒) | `30` |
| `--watch` | 带有变更警报的持续扫描 | 关闭 |
| `--interval` | 监控模式扫描之间的间隔秒数 | `300` |
| `-o, --output` | `table`、`json`、`html` 或 `both` | `table` |
| `--output-file` | 将输出写入文件(根据扩展名生成 JSON 或 HTML) | - |
| `-T, --timing` | 计时模板 0-5 | `3` |
| `-v, --verbose` | 详细输出 | 关闭 |
| `--max-parallel` | 最大并发探测数(覆盖计时设置) | - |
| `--timeout` | 探测超时时间(毫秒)(覆盖计时设置) | - |
| `--randomize-tcp` | 随机化每次探测的 TCP 窗口/TTL | 关闭 |
| `--decoys` | 混入原始扫描探测中的诱饵 IP | - |
| `--fragment` | 分片 IP 数据包(仅限原始扫描) | 关闭 |
| `--interleave` | 在主机间交错扫描 | 关闭 |
## 计时模板
| 模板 | 标签 | 最大并发 | 探测延迟 | 超时 | 抖动 |
|----------|-------|-------------|-------------|---------|--------|
| T0 | Paranoid(隐蔽) | 1 | 300ms | 5000ms | 是 |
| T1 | Sneaky(鬼祟) | 5 | 100ms | 3000ms | 是 |
| T2 | Polite(礼貌) | 20 | 50ms | 2000ms | 是 |
| T3 | Normal(正常) | 100 | 10ms | 1500ms | 否 |
| T4 | Aggressive(激进) | 500 | 0ms | 1000ms | 否 |
| T5 | Insane(极速) | 2000 | 0ms | 500ms | 否 |
## 扫描类型
**SYN 扫描**(默认,需要 root):发送 TCP SYN 数据包并分析响应。半开扫描——从不完成三次握手。收到 SYN-ACK 后发送 RST。使用批量发送-接收模式以提高速度。
**Connect 扫描**(无需 root):使用 async I/O 进行完整的 TCP 三次握手。通过 tokio 实现完全并行。
**UDP 扫描**:发送空数据报。有响应的端口为开放;ICMP 不可达表示关闭;无响应表示开放或被过滤。
**FIN 扫描**(需要 root):发送 TCP FIN 数据包。关闭的端口响应 RST;开放/被过滤的端口不发送响应。有助于规避基于 SYN 的防火墙。
**NULL 扫描**(需要 root):发送无标志位的 TCP 数据包。响应逻辑与 FIN 扫描相同。可以绕过某些无状态防火墙。
**Xmas 扫描**(需要 root):发送带有 FIN、PSH 和 URG 标志位的 TCP 数据包。响应逻辑与 FIN 扫描相同。因标志位“亮起”的模式而得名。
## 工作原理
1. **发现**:使用 ICMP echo、ARP 请求或 TCP 连接尝试识别存活主机
2. **端口扫描**:探测每个存活主机上的指定端口,以确定开放/关闭/被过滤状态
3. **服务检测**(可选):连接到开放端口,抓取 Banner,并发送特定协议探测以识别运行的服务和版本
4. **TLS 检查**:从类 HTTPS 端口提取证书详细信息以进行服务识别
5. **OS 指纹识别**(可选):分析 TCP/IP 响应特征以估计目标的操作系统
6. **漏洞检查**(可选):测试默认凭据和危险暴露的服务
7. **输出**:结果显示为彩色表格、JSON 或包含网络图表的独立 HTML 报告
## 免责声明
本工具仅供授权的安全测试和教育目的使用。请仅扫描您拥有或拥有明确测试权限的网络。
标签:AES-256, ARP 扫描, Banner Grabbing, CLI 工具, Facebook API, GitHub, HTML 报告, ICMP, mDNS, Rust, SSDP, Talos规则, TCP/IP 协议栈, TLS/SSL 分析, UPnP, URL短链接分析, 主动扫描, 云存储安全, 加密, 协议分析, 可视化界面, 安全工具库, 安全运营中心, 密码管理, 插件系统, 操作系统指纹识别, 数据统计, 服务探测, 权限提升, 漏洞扫描器, 漏洞评估, 物联网安全, 端口扫描, 网络安全, 网络安全审计, 网络扫描, 网络映射, 网络流量审计, 被动侦察, 足迹分析, 通知系统, 隐私保护, 隐身扫描, 默认凭据检测