蜘蛛池知识

蜘蛛池里的假蜘蛛:UA 核驗、IP 反查與行為特征

蜘蛛池日誌里出現大量带搜尋引擎 UA 的請求,並不等于真的被搜尋引擎抓取。本文整理三层核驗思路:UA 字符串只当线索、用反向 DNS 與官方 IP 段做確認、再结合請求行為特征辅助判断,並說明假蜘蛛流量會给资源調整和效果判断带来哪些干扰。

蜘蛛池知识

蜘蛛池里的假蜘蛛:UA 核驗、IP 反查與行為特征

看蜘蛛池的訪問日誌时,最容易犯的一個错誤是:看到 UA 里寫着 Baiduspider、Googlebot 或者 bingbot,就預設這是搜尋引擎的抓取。實际上 UA 字符串是可以随手改的,采集工具、掃描器、甚至浏览器插件都能把 UA 伪装成任意值。如果不做核驗,很容易把一堆無關流量当成抓取信号,進而做出错誤的资源調整。

為什么日誌里會混進假蜘蛛

常见的来源有几類:

  • 采集软件和爬虫框架的預設或自定义 UA,很多會直接模仿常见搜尋引擎;
  • 安全掃描、漏洞探测工具,它們為了绕過简單的拦截規則,也會套用搜尋引擎 UA;
  • 有人手動改 UA 做压力測試、抓取内容或做竞品监控;
  • 部分代理、预取服務和监控探针,UA 里會带上 bot 字样,但並不属于搜尋引擎。

這些請求落在入口頁上,看起来和真蜘蛛没有区別,但用途完全不同。

第一层:UA 字符串只当线索,不当结论

UA 的價值在于快速分流,而不是判定。可以先用它把日誌分桶:声称是百度的、声称是 Google 的、声称是必應的、其他。分桶之後重点看两類異常:一是 UA 與声称身份明顯不符,比如一個自称 Googlebot 的請求却只在抓 HTML、完全不碰任何静態资源;二是同一 IP 在短時間内用多個不同搜尋引擎的 UA 轮流請求。這两類基本可以列為可疑,但不能僅凭 UA 就封禁。

第二层:rDNS 反查與官方 IP 段核對

這是最有效的一步。主流搜尋引擎都提供了驗證方式:對来訪 IP 做反向 DNS 解析,检查解析出的域名是否落在官方域名下,然後再對该域名做一次正向解析,確認能解析回同一個 IP。只做單向反查是不够的,因為反向解析记錄同样可以被伪造,一正一反互相印證才有意义。

另一個思路是直接比對官方公布的 IP 段列表。把日誌里的 IP 與列表做匹配,不在列表里的就可以先归為可疑。要注意几点:CDN、云服務和代理轉發會让真實来源 IP 變成回源 IP;IPv6 地址段需要單獨维護;官方 IP 段會定期更新,最好隔一段時間同步一次。

第三层:行為特征辅助判断

身份核驗通過之後,行為特征可以進一步確認,也可以用来發現一些邊界情况:

  • 抓取频率是否平稳,真蜘蛛通常有相對稳定的节奏,而不是短時間爆發式請求;
  • 是否讀取 robots.txt,是否遵守其中的屏蔽規則;
  • 是否請求頁面引用的静態资源,很多采集工具只取 HTML;
  • 請求头是否完整,Referer、Accept、Accept-Language 這些字段缺失或異常是常见信号;
  • 並發连接數和請求間隔是否符合搜尋引擎的公開說明。

這些特征單獨看都不够,组合起来判断更可靠。

假蜘蛛流量會带来哪些誤判

影响主要体現在三個方面。第一是效果判断失真:看到入口頁每天都有一批带着搜尋引擎 UA 的請求,就以為 URL 已经被發現了,實际上搜尋引擎可能根本没来過。第二是资源調整跑偏:根據這些假資料去改連結结构、調入口頁數量、換跳轉方式,等于在错誤的反馈上做優化。第三是服務器压力被错誤归因,明明是采集流量,却以為是搜尋引擎在加大抓取。

反向的風險同样存在。如果只用 UA 做封禁,很可能把真蜘蛛一起挡掉,尤其是一些低频抓取,一旦被拦,恢复需要時間。

可执行的核驗顺序

  1. 按 UA 粗筛,把日誌分成几個桶,先看有没有明顯異常的组合。
  2. 對可疑 IP 做 rDNS 反查,並做正向解析回驗。
  3. 比對官方 IP 段列表,把不在列表里的 IP 單獨标记。
  4. 结合行為特征复核,確認哪些是采集、哪些是掃描。
  5. 拦截时優先按 IP 段處理,而不是只按 UA,避免誤伤。
  6. 保留原始日誌和核驗记錄,方便後續回溯和調整規則。
核驗的目的是让判断更接近事實,而不是把所有非官方流量都挡在门外。入口頁的價值在于被發現,過度拦截有时候比放過更麻烦。

蜘蛛池的效果本来就依赖日誌反馈来調整,如果反馈源头是脏的,後面所有動作都會偏。花一点時間把蜘蛛身份核驗做扎實,比反复調整入口頁结构更划算。