端口扫描实战流程:RustScan 与 Nmap
端口扫描的目标不是得到一张“开放端口列表”,而是建立后续验证所需的服务地图:哪些地址在线、开放了哪些 TCP/UDP 端口、服务和版本是什么、哪些结果需要人工复核。本文给出一套适合授权测试和靶场环境的可重复流程;具体参数可继续查阅 Nmap 指南 与 RustScan 指南。
只扫描自己拥有或明确授权的目标。降低速率、限定并发并保存命令记录,避免对生产服务造成额外负载。
推荐工作流
| 阶段 | 首选方式 | 产出 |
|---|---|---|
| 存活确认 | nmap -sn 或已知地址直接跳过 | 在线主机清单 |
| TCP 发现 | RustScan 快速发现,或 nmap -p- | 开放 TCP 端口 |
| 服务识别 | nmap -sV -sC | 协议、版本、默认脚本结果 |
| 深入验证 | 针对端口选择 NSE 和协议客户端 | 可复现证据 |
| UDP 补充 | 小范围 -sU --top-ports | 常见 UDP 服务 |
| 归档 | -oA 同时输出三种格式 | 可搜索、可对比的扫描记录 |
1. 明确目标并确认存活
先把目标写入文件,避免手工复制时扫错网段:
printf '%s\n' 192.0.2.10 192.0.2.11 > targets.txt
nmap -sn -iL targets.txt -oA scans/00-host-discovery
ICMP 被过滤不代表主机离线。靶场 VPN 或已知单机地址可以使用 -Pn 跳过主机发现,但这会让 Nmap 尝试扫描每个目标,范围较大时要谨慎。
2. 先做全 TCP 端口发现
常见的“只扫默认 1000 个端口”会漏掉 8081、10000、31337 等非标准端口。单台实验主机可以先用 RustScan 快速发现,再把结果交给 Nmap:
rustscan -a 192.0.2.10 --range 1-65535 --ulimit 5000 -- -Pn
环境不适合高并发时,直接使用 Nmap 并控制速率更稳妥:
sudo nmap -Pn -sS -p- --min-rate 500 --max-retries 2 \
-iL targets.txt -oA scans/01-tcp-all
--min-rate 不是越大越好。丢包、VPN 延迟或目标限速都可能造成假阴性;发现结果异常少时,应降低速率并复扫关键端口。
3. 对开放端口做服务识别
假设发现了 22、80、3306 和 8080:
sudo nmap -Pn -sV -sC -p22,80,3306,8080 \
--version-all 192.0.2.10 -oA scans/02-services
-sV探测服务和版本,不应把端口号直接等同于协议。-sC运行默认 NSE 脚本,适合建立第一轮上下文。--version-all更积极,生产环境先评估影响。- HTTP 服务要分别记录状态码、标题、跳转目标、TLS 证书和虚拟主机线索。
版本字符串只是线索,不是漏洞结论。反向代理、发行版回补和自定义 Banner 都会让“版本号匹配 CVE”产生误报。
4. 选择性运行 NSE
根据已经确认的协议选择脚本,避免一开始就使用范围过大的脚本集合:
nmap -Pn -p80,8080 --script http-title,http-headers,http-methods 192.0.2.10
nmap -Pn -p445 --script smb-protocols,smb2-security-mode 192.0.2.10
nmap -Pn -p22 --script ssh2-enum-algos,ssh-hostkey 192.0.2.10
vuln 类脚本可能发送更具侵入性的请求。先阅读脚本说明,再在授权范围内单独执行,并用协议客户端复核结果。
5. 补充 UDP 扫描
UDP 没有 TCP 握手,完整扫描慢且更容易出现 open|filtered。先查高价值常见端口:
sudo nmap -Pn -sU --top-ports 50 --version-intensity 2 \
192.0.2.10 -oA scans/03-udp-top50
DNS、SNMP、NTP、TFTP 等服务应再用对应客户端验证。不要把无响应直接解释为开放端口。
6. 保存证据并形成服务清单
推荐始终使用 -oA,同时保留普通文本、XML 和 grepable 输出。最终清单至少包含:
| 字段 | 示例 |
|---|---|
| 目标 | 192.0.2.10 |
| 端口/协议 | 8080/tcp |
| 服务 | HTTP |
| 产品与版本 | nginx 1.x(待复核) |
| 证据 | 扫描文件、响应头、截图或命令输出 |
| 下一步 | 目录发现、默认凭证检查、配置审计 |
Web 端口确认后,可进入 Web 目录扫描实战流程;获得低权限 Shell 后,再使用 Linux 提权检查清单。
常见漏扫与误判
- 只扫默认端口:补做 TCP 全端口扫描。
- 速率过高:降低并发和重试后复扫。
- 把端口号当协议:使用
-sV,再由客户端验证。 - 忽略重定向和虚拟主机:检查响应头、证书 SAN 与 Host 头。
- 只保留终端输出:用
-oA保存原始结果,便于复盘和差异比较。 - 一次性运行大量脚本:按协议和假设逐层验证,减少噪声与影响。