跳至主要內容
CJCJ Kuo

全站文章搜尋

輸入關鍵字即刻在靜態索引中快速搜尋
↑↓ 導航 · Enter 選取前往獨立搜尋頁 →
快速從 DNS 驗證合法爬蟲,不要再浪費效能給惡意爬蟲!!!
資訊技術••約 3 分鐘•666 字

快速從 DNS 驗證合法爬蟲,不要再浪費效能給惡意爬蟲!!!

網站在運作從提供服務的運算或是輸出的流量,每樣事物對於經營者來說都是成本。好的爬蟲帶來流量,惡意的爬蟲帶來只有滿滿的帳單金額。起初並沒有太針對爬蟲的有太多研究,一切起源於想收集惡意攻擊IP名單同時整合進防火牆阻擋的過程中,才思考到清單內是否會帶有搜尋引擎爬蟲的 IP,全阻擋掉的結果會一起封鎖搜尋引擎爬蟲,導致網站無法被正確爬蟲索引,畢竟現在網站流量來源有絕大多數靠著搜索引擎帶進來的。

理論上主流的搜尋引擎爬蟲現在都有自主規範,爬蟲在搜索數據時都會主動表明身分在 User-Agent 的字串中,而字串的來源建立於網路世界的互相信任,但對於即將要把黑名單的IP清單匯入防火牆中,阻擋會發生在網路的 Layer 3,不會等看到字串內容後後才決定是否封鎖IP來源。

腦中第一個冒出的想法就是先去確認google 大神的爬蟲該如何驗證,在官方說明頁面中 Verifying Googlebot 清楚的說明如何驗證 Google 爬蟲 。

Google 搜尋中心關於驗證 Googlebot 爬蟲的官方說明文件頁面

基本上大意就是Google 的爬蟲會隨著時間 IP 範圍會有所變化,所以不會有一個官方表格可以參考IP範圍。
如果需要驗證爬蟲來源是否合法,請使用 host這個指令輸入IP後,透過 DNS 反查網域名驗證,亦可取得網域名後再透過網域反查IP再次確認。

# IP反查網址

[root@Web ~]# host 66.249.69.121
121.69.249.66.in-addr.arpa domain name pointer crawl-66-249-69-121.googlebot.com.

# 網址反查IP

[root@Web ~]# host crawl-66-249-69-121.googlebot.com.
crawl-66-249-69-121.googlebot.com has address 66.249.69.121

如果使用的是 Window 的可以使用 nslookup 來查詢

C:>nslookup 66.249.69.121
伺服器:  dns.google
Address:  8.8.8.8

名稱:    crawl-66-249-69-121.googlebot.com
Address:  66.249.69.121


C:\>nslookup crawl-66-249-69-121.googlebot.com.
伺服器:  dns.google
Address:  8.8.8.8

未經授權的回答:
名稱:    crawl-66-249-69-121.googlebot.com
Address:  66.249.69.121

確認 Google 有提供這樣的服務後,查詢其他家的搜索引擎,整理過後提供下列表格。

搜尋引擎DNS反查反查字串來源
GoogleY.google.com
.googlebot.com
Verifying Googlebot
百度Ycrawl.baidu.com.
.crawl.baidu.jp.
FAQs of Baiduspider
BingYsearch.msn.comVerifying Bingbot
YandexYyandex.ru
yandex.net
yandex.com
Yandex Support
DuckDuckBotN提供IP清單
DuckDuckBot
YahooN
FacebookN

Shell 程式碼

取得一長串的 IP 列表可利用shell script 快速反查DNS驗正來源,過濾完成的表單後在進行後續處理。
此程式碼並沒有做出正反查詢,是為了節省運算時間,白名單的IP再用其他 Shell Script 二次驗證。

host_check(){
Listlocal=$1
HCtemplist=$(mktemp /tmp/iplistA.XXXX)
for ip in $(cat $Listlocal)
do
if [ $(host $ip | grep -v -E '(google.com.$|googlebot.com.$|.search.msn.com.$|.baidu.com.$|.baidu.jp.$|.yandex.ru.$|.yandex.net.$|.yandex.com.$|duckduckbot.duckduckgo.com.$)'| wc -L) -gt 0 ] ; then echo "$ip" >> $HCtemplist ; else echo "$ip">> $WhiteIpList ; fi &
sleep 0.015
done
wait
mv -f $HCtemplist $Listlocal
}
WhiteIpList=/tmp/WhiteIpList
host_check "IP列表檔案路徑"

Shell 參數說明

  • WhiteIpList
    • 查詢完成後白名單存放處
  • IP列表檔案路徑
    • 請修改成需要輸入的清單路徑
查看此系列所有文章 →
CJ Kuo (郭仕杰)

CJ Kuo (郭仕杰)

創辦人兼主筆

熱愛軟體架構、DevOps、系統調優與新技術探索的工程實踐者,也會寫寫投資和生活。

獨立技術專刊推播

訂閱技術電子報

有新文章發布時寄送到您的信箱,不發送垃圾信。