搜索抓取

真蜘蛛还是假蜘蛛:User-Agent、反向 DNS 与 IP 段怎么核对

带 Googlebot 字样的请求不一定来自搜索引擎。本文梳理 UA、反向 DNS、IP 段三层核对方法,说明如何在日志与服务器配置里给真蜘蛛放行、给伪装爬虫限速,兼顾资源保护和抓取畅通。

搜索抓取

真蜘蛛还是假蜘蛛:User-Agent、反向 DNS 与 IP 段怎么核对

服务器日志里出现带 Googlebot、Bingbot、Baiduspider 字样的请求,并不等于搜索引擎真的来了。User-Agent 只是一个客户端自报的字符串,任何脚本都能原样复制。对站点来说,做蜘蛛验证主要为了两头:一头是别把真蜘蛛误封,另一头是别让伪装成蜘蛛的采集器把连接数和带宽吃光。

只认 User-Agent 会出什么问题

把 UA 当成唯一判据,通常会出现两种误判。一种是放行:随便一个爬虫脚本改掉 UA,就能绕过频率限制,反复抓列表页和搜索接口。另一种是误伤:某些正常来源的请求恰好带着相似字符串被一刀切掉,或者反过来把真蜘蛛限得太死,抓取量掉下去却找不到原因。

三层核对:UA、反向 DNS、IP 归属

比较稳妥的做法是按顺序做三次核对,任何一层不通过就当作普通访客处理。

第一步:UA 与来源 IP 是否对得上

搜索引擎官方爬虫的 UA 里通常带有自己的标识和说明链接,同时来源 IP 会落在官方公布的地址段内。UA 写着 Googlebot 但 IP 属于某个 IDC 或代理池,基本可以判定为伪装。

第二步:反向解析,再正向核对一次

对来源 IP 做反向 DNS,看域名是否属于官方爬虫域名;拿到域名后再做一次正向解析,确认解析结果与原始 IP 一致。只做反向解析容易被伪造的 PTR 记录骗过,正向回查能补上这一环。

第三步:确认地址段是否在官方公布范围内

搜索引擎会发布自己的抓取 IP 段列表,并定期更新。把这三步组合起来,误判率会低很多,代价是要维护一份地址段清单和少量缓存。

在日志和服务器配置里怎么落地

  • 保留完整访问日志:来源 IP、UA、请求路径、状态码、响应时间,判断抓取异常时这几项缺一不可。
  • 给验证过的蜘蛛单独打标签,再按标签做限流,而不是拿 UA 字符串做正则匹配。
  • 把验证逻辑放在 CDN 或网关层,避免每个应用进程重复解析 DNS。
  • DNS 查询要有缓存和超时,解析失败时按普通访客对待,不要直接拒绝,否则一次 DNS 抖动就可能误伤。

假蜘蛛常留下的痕迹

伪装爬虫的行为特征通常比 UA 更明显:

  • 抓取节奏非常均匀,间隔几乎没有波动,像固定 sleep 的脚本;
  • 只抓有数据价值的接口或列表页,不请求静态资源;
  • 无视 robots.txt 里声明的限制路径;
  • 并发数远超正常抓取,且集中在少数几个 IP 上;
  • 来源 IP 分散在同一机房段,UA 却在多个名称之间切换。
以上只是概率性线索,不能单独作为封禁依据。先限速、观察一段时间,再决定是否长期拦截,比直接拉黑更安全。

限流与白名单的顺序

  1. 先验证,再打标签,最后才落实限流策略,顺序颠倒容易误伤正常抓取。
  2. 对验证通过的蜘蛛给合理并发上限,而不是完全放开;服务器扛不住时优先降速,而不是回 403。
  3. 对未验证的请求按普通访客处理,用频率限制和资源配额控制消耗。
  4. 定期复查规则:地址段会变,官方爬虫域名也会调整,写死的正则总有一天会失效。

蜘蛛验证不是一次配置就完事的工作,它更像日志分析的一部分。把 UA、反向 DNS、IP 段三层核对固定成流程,再结合日志里的抓取路径与响应时间一起看,才能在保护服务器的同时,不让真正的搜索蜘蛛吃闭门羹。