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

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

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

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

基本上大意就是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反查反查字串來源
Google Y .google.com
.googlebot.com
Verifying Googlebot
百度Y crawl.baidu.com.
.crawl.baidu.jp.
FAQs of Baiduspider
Bing Y search.msn.com Verifying Bingbot
Yandex Yyandex.ru
yandex.net
yandex.com
Yandex Support
DuckDuckBot N提供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列表檔案路徑
    • 請修改成需要輸入的清單路徑

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *