蜘蛛池知识

蜘蛛池入口页的蜘蛛真伪识别:UA 初筛、反向 DNS 与 IP 段比对

蜘蛛池入口页的日志里,带蜘蛛 UA 的请求不一定都是真爬虫。本文梳理 UA 初筛、反向 DNS 双向验证、IP 段比对三层手段,讲清 CDN 和反向代理下取真实 IP 的问题,并给出白名单维护与限速放行的落地建议,尽量减少误封真蜘蛛的情况。

蜘蛛池知识

蜘蛛池入口页的蜘蛛真伪识别:UA 初筛、反向 DNS 与 IP 段比对

为什么要先分清真蜘蛛和假蜘蛛

蜘蛛池入口页的日志里,每天都会出现大量带着蜘蛛 UA 的请求。有些是真的搜索引擎爬虫,有些是采集脚本、扫描器或者竞争对手的探测。如果不加区分就一律当成“蜘蛛来了”,很容易得出错误的结论:以为抓取量在涨,实际只是噪声;以为某个入口页被反复抓取,其实只是别人在批量扫描你的链接。

更麻烦的是反向问题——为了防扫描,不少站长直接用 UA 关键词封禁,结果把真蜘蛛也挡在了门外。识别蜘蛛真伪的意义,就是让放行和拦截都有依据,而不是凭感觉。

三种验证手段,优先级并不相同

第一层:User-Agent 只能做初筛

UA 是最容易看到、也最容易伪造的字段,任何脚本都能把 UA 改成 Googlebot 或 Bingbot。所以 UA 只适合做第一层过滤:先把明显不是蜘蛛的请求排除掉,剩下带蜘蛛 UA 的,再进入下一层验证。

实操上建议把 UA 匹配写成白名单而不是黑名单,同时记录完整的 UA 字符串,方便后续和官方公布的 UA 列表比对。搜索引擎会不定期更新 UA,注意别把旧版本的 UA 直接判成假蜘蛛。

第二层:反向 DNS 双向验证

主流搜索引擎的官方文档里通常会说明验证方式,其中最常见的是反向 DNS:对来源 IP 做一次 PTR 查询,看解析出的域名是否属于官方网段(例如 Googlebot 对应的 googlebot.com / google.com,Bingbot 对应的 search.msn.com)。

关键在于要做双向验证:先反查 IP 得到域名,再对这个域名做一次正向解析,确认解析结果能回到同一个 IP。只做单向反查,容易被伪造的 PTR 记录骗过去。

第三层:IP 段比对

搜索引擎一般会公布爬虫使用的 IP 段列表,可以定期拉取并与日志中的来源 IP 比对。这一层最准,维护成本也最高,因为 IP 段会变动。它更适合抓取量较大、需要精细区分来源的场景。

三层验证不必全上。入口页数量不多、日志量不大时,UA 白名单加一次反向 DNS 通常就够用;只有当误封会带来明显损失时,才值得投入精力维护 IP 段。

常见的几个误区

  • 只看 UA 就封 IP。共享 IP、CDN 回源、代理转发都可能让真蜘蛛的请求带上非官方 IP,直接按段封禁容易误伤。
  • 把反向 DNS 失败等同于假蜘蛛。部分中小搜索引擎或新爬虫没有公开的验证方式,反查失败并不代表一定是伪造。
  • 忽略 CDN 与反向代理。入口页前面如果挂了 CDN,日志里记录的可能是 CDN 节点 IP,必须从 X-Forwarded-For 等头部取原始地址,否则整套验证都建立在错误的 IP 上。
  • 只拦不记。被拦掉的请求如果不留日志,后面想复盘“是不是误杀了”就没有依据。

落地建议

  1. 日志中至少保留:时间、来源 IP、完整 UA、请求 URL、状态码、响应时间。
  2. 写一个每日任务,把带蜘蛛 UA 的请求抽出来做反向 DNS 验证,结果分成“确认蜘蛛”“待定”“疑似伪造”三档。
  3. “待定”这一档先别急着封,观察它的行为:是否遵守 robots.txt、是否只抓入口页、请求频率是否异常。
  4. 确认为真蜘蛛的 IP 段,可以在限速规则里单独放行,避免统一的频率限制影响正常抓取。
  5. 每隔一段时间复核白名单,清理已经失效的 UA 与 IP 段。

把识别这一步做扎实之后,日志里的数字才可信,后续判断入口页该扩还是该收,才有站得住脚的依据。