为什么要留痕归档
nmap 终端滚动输出无法复用:复测时想回答『这个端口上次是不是开放过』,没有留档就只能重扫一遍,而且两次结果受参数与网络状态影响不可比。用 -oA 一次生成三种格式(.nmap 文本、.xml、.gnmap),其中 XML 结构完整,最适合入库与差异比对。适用 nmap 7.x 各平台。
基本信息
| 核心选项 | -oA 生成全部格式,-oX/-oN/-oG 单独输出 |
|---|---|
| 追加输出 | --append-output 合并到已有文件 |
| 归档字段 | 日期、目标范围、扫描目的、参数、工具版本 |
| 文件敏感性 | XML 与 grepable 含资产与端口清单 |
| 常用工具 | nmap 7.x,XML 可用脚本或 xmlstarlet 解析 |
典型使用场景
- 复测对比:两次扫描结果按主机与端口做差异,确认整改是否生效
- 暴露面月度基线:把当期 XML 与上月对比,输出新增开放端口清单
- 审计留痕:扫描任务附带参数与工具版本,结论可复现
- 交接与追溯:半年后能说清某个端口是什么时候出现的
- 多工具汇集:把 XML 转换后与其他资产数据统一入库
输出与归档
输出与归档
nmap -sT -sV --open -p 80,443,22 192.0.2.0/24 -oA scan-2026-10-12
# 生成 scan-2026-10-12.nmap / .xml / .gnmap 三个文件
nmap -sV -iL targets.txt -oX result.xml --append-output # 追加到同一文件
diff <(grep '^[0-9]' old.gnmap) <(grep '^[0-9]' new.gnmap) # grepable 快速比对三种输出格式对照
| 格式 | 扩展名 | 适用场景 |
|---|---|---|
| 普通文本 | nmap | 人工阅读与截图存档 |
| XML | xml | 入库、脚本解析、差异比对 |
| grepable | gnmap | 命令行快速筛选与简单 diff |
给扫描文件起可检索的名字(日期加目标范围加目的),避免半年后面对一堆 scan1.xml 无人能解释来源;文件名里不要带客户或系统敏感名,归档目录另做访问控制。
差异比对要固定参数:两次扫描若一次用了 -sV 一次没用,端口状态相同但服务识别结果不同,diff 会给出大量无意义差异。
归档命名建议
- 文件名包含日期、目标范围与扫描目的,例如 2026-10-12_生产网段_暴露面月度基线
- 同一任务的三种格式放在同一目录,避免 XML 与文本版本错配
- 归档目录按季度分区,过期文件按数据分级要求清理或转冷存储
- 附带一份说明文件记录扫描参数、执行人与审批单号