網站在運作從提供服務的運算或是輸出的流量,每樣事物對於經營者來說都是成本。好的爬蟲帶來流量,惡意的爬蟲帶來只有滿滿的帳單金額。起初並沒有太針對爬蟲的有太多研究,一切起源於想收集惡意攻擊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反查 | 反查字串 | 來源 |
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 | Y | yandex.ru yandex.net yandex.com | Yandex Support |
DuckDuckBot | N | 提供IP清單 | DuckDuckBot |
Yahoo | N | ||
N |
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列表檔案路徑
- 請修改成需要輸入的清單路徑