先把结论说清楚:扫描中断后,不要用“进度条走到哪”或“剩余时间”判断覆盖范围,因为这类显示通常按已排队任务估算,中断后可能回退、跳变或直接归零。更可靠的做法是拿一份你能核对的全量URL清单,与工具已产出的结果做差集,再对差集抽样判断是“真的没扫到”还是“扫到了但没写进结果”。下面以你手里的一份站点URL清单为对象,把这件事拆成可执行步骤。
判断覆盖范围的前提是有一个独立于扫描工具的基准。常见基准有三种:服务器访问日志、站点地图里的URL列表、你自己从站内链接或数据库导出的URL清单。三者覆盖范围不同,结论也会不同。
如果这次中断发生在扫描早期,日志基准往往比站点地图更可信,因为工具可能还没来得及读取站点地图。反过来,如果中断发生在扫描后段,站点地图和自建清单的差集更能说明漏掉了什么。
“覆盖”不是一个是非题。中断后你至少要把URL分成三类,分别核对:
把这三类分开后,你会发现“已覆盖范围”其实取决于你问的是哪一种。若你关心的是数据完整性,第二类才是风险最高的,因为它看起来像扫过了,实际没有可用记录。
具体动作:把基准清单和工具结果各导出为一份纯文本URL列表,统一去掉协议、www前缀和结尾斜杠,然后做差集。差集里通常同时混着上面第二类和第三类。这时不要急着补扫全部差集,先抽样。
抽样方法可以这样设定(以下为假设示例,仅说明比较方法):从差集中随机取50条,逐条在服务器日志里查该URL在扫描时间段内是否有请求记录。假设50条里有30条有请求记录、20条没有,那么可以粗略推断差集中约六成属于“已请求但无结果”,四成属于“未请求”。这个比例只用于决定下一步优先级,不能当作精确覆盖率,因为抽样量小、日志可能不完整。
根据这个结果决定动作:如果“已请求但无结果”占多数,优先检查限流、超时和结果写入环节,而不是直接重扫;如果“未请求”占多数,说明中断发生在任务调度阶段,补扫时应从差集里未请求的部分开始,而不是从头再来。
直接重扫全部URL通常不是最优选择,因为上一次中断的原因如果还在,第二次很可能在相近位置再次中断。重扫前值得确认几件事:
一个可操作的做法是:先用差集中“未请求”的部分做一次小批量试扫,观察请求成功率和结果写入是否正常。如果小批量稳定,再扩大到全部差集;如果仍然出现大量“已请求但无结果”,说明问题不在覆盖范围,而在采集条件本身,此时补扫只会重复产生无效记录。
中断后的覆盖判断容易退化成“大概扫了七八成”这种无法复核的说法。更有用的记录方式是:基准清单总数、结果条目数、差集数量、差集抽样中已请求与未请求的比例、以及你据此决定补扫的范围。这样下一次中断时,你可以直接对比两次的差集结构,判断问题是偶发还是稳定存在。
需要提醒的是,请求量归零、结果条目骤减这类现象,不能单独证明扫描处理正确或错误,它们也可能来自日志轮转、结果文件未刷新、工具进程被系统回收等合理解释。把现象和基准差集放在一起看,才能得出站得住的结论。