自动换链软件,一次全站扫描被中断后怎样判断已覆盖范围

📍 WDQWDWQD987AAAAA:216.73.216.37
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /a9d7b94da894.html
📄

自动换链软件,一次全站扫描被中断后怎样判断已覆盖范围

结论先给:如果扫描过程留下了可续跑的进度记录,中断只影响“当前这一轮”的完整性,你可以按记录里的游标位置判断覆盖到哪;如果没有任何持久化进度,只剩一份不完整的输出文件,那么能确认的只是“输出里出现的页面已被处理”,不能反推未出现的页面是没扫到还是扫过但无结果。判断覆盖范围的关键,不是看结果条数,而是看有没有可对账的处理清单和明确的扫描边界。

先分清两种中断:可续跑与不可续跑

自动换链软件在扫描时通常会维护一个待处理队列或已处理集合。中断后先确认它属于哪一类:

判断方法很直接:中断后不要立即重跑,先检查工作目录或数据存储里有没有比结果文件更早生成、且带位置信息的中间文件。有,就按可续跑处理;没有,就按不可续跑处理。这个判断决定了后面是“续跑”还是“重扫”,两者代价差别很大。

用三个可对账的依据界定已覆盖范围

无论哪类中断,都要找到能独立对账的依据,而不是只信软件自己的统计数字。可用的依据有三类:

  1. 输入清单:本次扫描开始时提供的页面列表、站点地图或数据库查询结果。它是分母,覆盖范围必须相对它来说。
  2. 已处理标识:结果中每条记录对应的页面 URL 或主键。把结果里的标识去重后与输入清单求差集,差集就是未确认覆盖的部分。
  3. 扫描边界参数:本次任务设定的目录范围、链接深度、是否跨子域等。边界之外本来就不在覆盖范围内,不能算作遗漏。

把这三者对齐后,你能得到三个数字:输入总数、已处理数、边界外数量。已处理数加上边界外数量如果接近输入总数,说明覆盖基本完整;差距明显,则说明中断点之前仍有未处理部分,或者输入清单本身与扫描边界不一致。

一个会推翻上述结论的反例

假设软件的结果文件是“边扫边写”的,且写入没有事务保证。中断发生时,最后若干条记录可能只写了一半,或者页面已被处理但结果尚未落盘。此时按结果文件统计的已处理数会偏小,而按进度文件读取的位置可能偏大。两者不一致时,不能简单取其一作为覆盖范围,而应以“进度位置”为上限、“结果文件”为下限,中间那段属于状态不确定区。

反过来也有一种情况:结果文件里出现了重复记录,或同一页面因跳转被记了多次。去重后已处理数会下降,若不去重就会高估覆盖。所以对账前必须先按页面标识去重,并确认标识口径一致——用完整 URL 还是规范化后的 URL,结果会不同,这一点需要在扫描前就定好,中断后才想起来往往已经晚了。

假设例子:怎样用一组数字决定续跑还是重扫

假设输入清单有 5000 个页面,边界外 200 个,结果文件去重后有 3100 条。若进度记录显示处理到第 3300 个位置,那么可确认覆盖约 3300 个,不确定区约 200 个,剩余约 1500 个。此时续跑是合理的:从第 3300 个位置继续,并对不确定区做一次小范围复核即可。

若没有任何进度记录,只能确认 3100 个,剩余约 1700 个且无法定位断点。这时续跑无从谈起,只能重扫,或者接受当前覆盖并明确标注未覆盖部分。选择哪一种,取决于未覆盖部分是否包含本次任务的关键页面——如果关键页面集中在站点前半部分且已在结果中,接受现状并补扫剩余目录是可接受的;如果关键页面分布未知,重扫更稳妥。

下一步动作与它如何改变后续判断

确定覆盖范围后,先做一件事:把本次的输入清单、边界参数和已处理标识导出并留存,作为下一次扫描的基线。这个动作的直接结果是,下次再发生中断时,你有一个可对比的历史快照,能快速判断是增量还是全量。

如果本次判定为不可续跑且已重扫,重扫完成后应核对两次结果的差集:差集中出现的页面,要么是上次中断遗漏的,要么是两次扫描边界或规则发生了变化。前者说明上次覆盖判断偏乐观,后者说明边界参数需要固定下来。这个核对结果会直接影响你下次是否还敢在中途中断后直接续跑。

最后提醒一点:扫描请求量下降、日志停止增长,都不能单独证明扫描已经完成或中断点已定位,它们也可能是限速、目标站点响应变慢或任务被外部终止造成的。要判断覆盖范围,始终回到输入清单、已处理标识和边界参数这三样可对账的东西上,而不是看过程指标。

图1 图2

nginx