搜尋抓取

真蜘蛛還是假蜘蛛: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 段三层核對固定成流程,再结合日誌里的抓取路径與响應時間一起看,才能在保護服務器的同时,不让真正的搜尋蜘蛛吃閉门羹。