介绍
Willow Makers 批准将报名服务迁移到新端口。目录和状态服务必须保持可用,调试服务必须保持关闭。你的任务是审查更新后的网络变化,提交准确的交接审查,包括会阻止验收的问题。
环境先采集真实的基线扫描,再执行本地维护场景。这是训练准备,并不声称是昨晚真实生产环境的历史。所有记录均为合成数据;真实 HTTP 服务共享一个容器。全程使用 Terminal。范围仅限 127.0.0.4 的 TCP 端口 8410,8420,8430,8440,8450。保留基线、计划、服务代码、数据和原始当前进程。你将创建扫描、下载和审查,不修复这个只供观察的现场。
只需会基本终端输入和路径。课程会解释必要的 Nmap、Ndiff、HTTP 和 shell 语法。先学习 Finding the Live Workshop Service 会有帮助,无需编程。
阅读计划并查看正常服务
本步骤先明确获准内容,观察正常响应,再解释变化。从 Terminal 开始。cd 改变此 shell 的工作目录,后续相对文件名以此为起点。如果打开另一终端,请重复此命令。
cd /home/labex/project/nmap-change
cat 显示文本文件。阅读批准计划:
cat plan.csv
CSV 表示逗号分隔值:第一行是列名,后续每行是一条记录。old_port 和 new_port 描述服务关系,并非应当扫描的先后顺序。各行批准报名从 8410 迁移到 8420,目录保留在 8430,状态保留在 8440,调试服务在 8450 保持不存在。因此新的报名端口开放是预期变更,其他开放并不自动获得批准。
准备好的 before.xml 是在本次训练更新前取得的真实 Nmap XML。before-business.csv 包含当时获取的完整报名响应。阅读正常业务样例:
cat before-business.csv
应看到 MAKERS-DAY 报名的三条记录:R01/Clay session、R02/Print session、R03/Wood session。迁移后必须保留相同的完整业务。
HTTP 是这些服务采用的请求/响应协议。curl 获取 URL。组合选项 -fsS 会在 HTTP 出错时失败、隐藏进度条,同时显示错误;-o 把响应保存到其后的文件名。地址选择目的地,冒号后的端口选择监听入口,/manifest.csv 选择资源。下载未变更的状态服务:
curl -fsS -o status.csv http://127.0.0.4:8440/manifest.csv
cat status.csv
应看到表头下方的 status/MAKERS-DAY/S01/Ready。这一成功响应是对照,并不能证明所有计划内服务都保留了。如果拼错文件名,先阅读错误,用 pwd 查看当前目录,再重新执行开头的 cd,然后重试修正后的命令。不要编辑准备好的文件或服务器。
收集可比较的当前扫描
本步骤扫描与基线相同的目标和完整端口集合。保持在 Terminal 的 /home/labex/project/nmap-change。TCP 端口标识监听入口。open 表示连接被接受,closed 表示扫描收到了拒绝。观察属于特定来源、目标、协议和时间。
Nmap 发现并检查网络服务。默认端口集合并不等于本次批准计划。-sT 选择无需原始数据包权限的 TCP connect 扫描;-Pn 跳过前置主机发现判断,使每个选定端口都被检查,它本身不能证明目标存活。-n 跳过反向名称解析,-p 选择许可端口,-oX 在正常终端输出之外写入结构化 XML。缺少某个端口会使比较不完整,而不能证明该服务消失。
Nmap 脚本引擎 NSE 可以发起有针对性的应用请求。先用 --script-help 阅读所选脚本的帮助:
nmap --script-help http-title
http-title 读取 HTML 标题。此本地场景的所有候选都已明确为 HTTP 入口。前面的 + 让这一个脚本在端口数据库未识别候选时仍执行,适用于本次已知 HTTP 范围,不能作为对无关服务强制运行任意脚本的理由。--script-args 传递其具名参数,http-title.url=/about 选择说明页面。
nmap -sT -Pn -n --script=+http-title --script-args=http-title.url=/about -p 8410,8420,8430,8440,8450 -oX after.xml 127.0.0.4
等待 Nmap done。8420、8440 和 8450 应为 open;8410 和 8430 应为 closed。阅读真实标题响应:报名已迁移,状态仍在,调试可达。仅凭常见的 SERVICE 名称不能识别业务。不要求精确产品版本。
若中断扫描或用错范围,请重新执行完整的修正命令以替换 after.xml。把纯文本改名为 XML 无法产生结构化证据。
区分差异与执行错误
本步骤用 Ndiff 阅读变化,不把每个差异都当作故障。保持在 Terminal。Ndiff 比较两个 Nmap XML 文件,但不知道你的批准计划。
shell 命令返回数字退出状态。$? 表示紧邻的上一条命令,echo 将其打印。把每组两行比较一起执行,避免其他命令覆盖状态。先将基线与自身比较:
ndiff before.xml before.xml
echo $?
预期为 0:没有有意义的差异。Ndiff 会忽略仅扫描时间不同的情况。现在比较更新前后。> 用命令的标准输出替换指定文件;这里只使用可编辑的目标 changes.txt:
ndiff before.xml after.xml > changes.txt
echo $?
预期为 1,表示发现差异。这是预期的非零状态,并非比较失败。缺失或无法读取的输入会产生状态 2,属于执行错误;应修正路径后重跑,而不能把缺失报告解释为没有变化。
cat changes.txt
- 行描述之前的观察,+ 行描述之后的观察。阅读以下配对:
-8410/tcp open
+8410/tcp closed
-8420/tcp closed
+8420/tcp open
-8430/tcp open
+8430/tcp closed
-8450/tcp closed
+8450/tcp open
真实输出还包含标题、服务名和页面标题。8440 上的状态服务未改变,默认差异视图通常会省略它,但仍要审查其保留要求。报名旧/新端口组合可以获准,而目录丢失与调试暴露会阻止交接。
提交业务与变更审查
本步骤确认真实的迁移业务,并交付完整审查。保持在 Terminal。标题或开放端口不能证明原始记录得以保留。下载新入口的完整响应:
curl -fsS -o current-business.csv http://127.0.0.4:8420/manifest.csv
cat current-business.csv
cmp 逐字节比较两个文件。相同时不打印任何内容,返回零:
cmp before-business.csv current-business.csv
你应看到原来的三条 MAKERS-DAY 报名记录,并比较成功。如果 URL 拼错,请修正后重复下载。不要为了通过比较而编辑记录。即使页面标题相同,真实业务不一致也属于交接问题。
审查 CSV 有四列:service、旧端口当前状态、新端口当前状态、判定。当某项使用同一个固定端口,包括 keep 或 absent 要求,旧端口和新端口相同,当前状态便重复。只有没有旧端口时才使用 -,它绝不表示端口关闭。判定区分 approved-move、approved-addition、kept、unexpected-loss 和 unexpected-open。旧/新关系不完整的迁移为 migration-incomplete;批准新增的服务缺失为 missing-addition;禁止的入口仍关闭则为 kept-absent。
带引号的 here-document 将后面的字面文本传给 cat。> 只覆盖你自己的审查文件,末尾 CSV 必须独占一行。写入计划中的四项:
cat > change-review.csv <<'CSV'
service,old_port_now,new_port_now,decision
registration,closed,open,approved-move
catalog,closed,closed,unexpected-loss
status,open,open,kept
debug,open,open,unexpected-open
CSV
cat change-review.csv
这份审查应当暂缓交接:获准迁移正常,但必需的目录缺失,调试意外暴露。即使现场还需要负责人后续修复,你的审查也已完成。保留证据,本任务不要停止调试或恢复目录。
最后,再次使用原始状态服务:
curl -fsS -o status.csv http://127.0.0.4:8440/manifest.csv
它必须仍提供相同的 Ready 记录。保留 before.xml、before-business.csv、plan.csv 以及每个原始当前服务不变。
总结
你收集了可比较的 Nmap 证据,解释了 Ndiff 退出状态,确认完整的迁移业务,并审查每项批准关系。获准差异、意外开放和必需服务丢失是不同发现。准确的审查可以要求暂缓交接,同时保留原始现场。



