跳到主要内容

端口扫描实战流程: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 保存原始结果,便于复盘和差异比较。
  • 一次性运行大量脚本:按协议和假设逐层验证,减少噪声与影响。

延伸阅读