外链发布工具一次全站扫描被中断后怎样判断已覆盖范围

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

外链发布工具一次全站扫描被中断后怎样判断已覆盖范围

先看中断发生在哪个阶段:如果工具是按站点清单逐条写入或逐条核验,中断后已处理条目通常留在任务记录或导出文件里,覆盖范围可以按“已完成条数÷清单总条数”估算;如果工具是先抓取整站再统一写入,中断往往只留下不完整缓存,此时不能把缓存条数当作覆盖范围,应先确认清单和状态字段是否落盘,再决定续跑还是重跑。

条件一:任务记录可按条目追溯,续跑前先做差集

这类工具通常会给每条URL或每个目标站一个状态值,例如待处理、已提交、已核验、失败。中断后不要直接点继续,先把当前状态导出,与原始清单做一次差集。差集里包含两类条目:一类是状态为空或停留在待处理,另一类是状态显示成功但缺少时间戳或返回标识。后者需要单独列出,因为“有状态”不等于“已覆盖”,状态字段可能是在发起请求时写入,而不是在确认响应后写入。

实际动作可以这样安排:先导出中断时的任务记录,按状态字段排序,统计已核验条目的数量;再取原始清单减去已核验集合,得到未覆盖集合;最后用未覆盖集合里随机抽取的少量条目做一次单条试跑。试跑结果会直接影响下一步——如果单条试跑能正常写入并返回可核验标识,说明工具状态机可用,续跑未覆盖集合即可;如果试跑也写不进去,说明问题不在中断本身,而在目标站限制、账号权限或任务配置,此时续跑只会重复失败。

例外情况是清单本身在中断期间被修改过。如果原始清单在扫描开始后增删过条目,差集结果会失真,需要回到扫描开始时的清单快照,否则会把新增条目误判为未覆盖,或把已删除条目算进覆盖率。

条件二:只有缓存或日志片段,先判断它能否代表覆盖

另一类工具不保留逐条状态,只留下抓取缓存、运行日志或临时文件。这时要区分三种证据:日志里出现了目标URL的请求行、缓存里存在该URL的响应体、以及最终写入结果里存在该URL的记录。三者强度不同。请求行只能证明发起过请求,不能证明写入成功;响应体存在说明拿到过返回,但可能因中断没有落库;只有写入记录才最接近“已覆盖”。

如果只有请求日志,比较稳妥的做法是把日志中出现过的URL视为“已尝试”,而不是“已覆盖”。接下来用日志条数与清单总数做比值,得到一个上限估计;再用日志时间戳判断中断点,中断点之后的条目大概率未处理。这个上限估计不能直接用于汇报覆盖率,但可以用来决定重跑范围:如果日志覆盖了清单的大部分且时间戳连续,可以只重跑中断点之后的条目;如果日志零散、时间戳跳跃,说明并发或重试打乱了顺序,按时间截断不可靠,应整批重跑。

假设一个场景:清单有200条,日志显示请求了140条,但其中30条只有请求行没有响应体。此时可确认拿到响应的约110条,另外30条状态未知。若直接按140条汇报,会高估覆盖;若按110条汇报,又可能漏掉那30条里已经写入的部分。更合理的做法是把这30条单独列为待复核,用单条核验的方式确认,而不是在覆盖率数字上二选一。

中断点附近的条目最不可信,优先复核

无论哪种工具,中断瞬间正在处理的条目状态最模糊。并发写入时,可能有多条同时处于“已发起未确认”状态;串行写入时,通常只有当前一条不确定。判断方法是看任务记录里最后若干条的时间戳间隔:如果间隔突然变大或出现重复时间戳,说明中断前有并发或重试堆积,需要复核的范围要向前多取一些;如果时间戳均匀且最后一条之后直接空白,通常只需复核最后一条。

复核动作不必全量重跑。对中断点附近的条目逐条查询目标端是否存在对应记录,把确认存在的标记为已覆盖,把确认不存在的放回未覆盖集合。这个动作的结果会改变续跑起点:如果中断点附近大部分已写入,续跑可以从更靠后的位置开始;如果大部分未写入,说明中断发生在写入前,续跑起点应提前到这批条目的开头。

决定续跑还是重跑,看三个可核对信号

这三个信号指向同一个判断:能核验、清单稳定、失败不集中,就续跑未覆盖集合;任一条件不成立,就缩小重跑范围或整批重跑。覆盖率数字只是这个判断的副产品,不要为了凑出一个完整百分比而把未核验条目算进已覆盖。

把判断结果落成下一次可复用的检查点

中断本身不可怕,可怕的是中断后无法回答“跑到哪了”。下一次启动扫描前,可以先确认工具是否支持按批次导出状态、是否在每条记录上写入时间戳和结果标识。如果支持,把批次大小设成可在一次运行内完成的量,中断后按批次差集续跑;如果不支持,就在外部维护一份清单和已处理标记,用工具输出回填。这样做的直接结果是:中断后你拿到的是可核对的未覆盖集合,而不是一个只能靠猜的进度条。

图1 图2

nginx