洋蔥網路學習紀錄
今天與公司的資深同事討論了爬蟲突破 IP 封鎖的技術,學習了有一個叫做洋蔥網路 (TOR) 的厲害技巧,是除了一般使用付費 proxy IP 外另一種突破 IP 封鎖的方式,以下紀錄我學習的心得。
TOR 的全名為 The Onion Project,發源至美國海軍開發的一個匿名交流網路。用戶端使用這種網路不會直接與要存取的目標電腦連線,而是會在兩者間隨機挑選多個中繼站當節點,形成一條連線路徑。而且每一個中繼結點間都會層層加密,只有目的地節點可以解密看到最終的內容,如此特性有如洋蔥多層的結構一樣複雜所以稱之,示意圖如下圖所示。
而 TOR 這種複雜的隨機多重代理特性,使得其難以追蹤使用者真實的來源IP,因此成為暗網活動最好的平台。python 也剛好有支援發送 TOR 請求的套件,以下為一個簡單的 tor 請求存取程式建立步驟。
首先,參考此篇安裝範例安裝 TOR 相關套件及設定,這裡我使用 docker Ubuntu 的 container 作為安裝環境,首先安裝 TOR。
1 | sudo apt-get update |
安裝完成後接著就可以試著啟動 TOR 服務了。
1 | service tor start |
接著可以進一步的去設定 TOR,這裏利用--hash-password
設定了一組密碼以防本機被其他外部代理所存取,輸出為得到了一個 hash 碼。
1 | tor --hash-password <enter your password here> |
接著到設定檔所在位置 /etc/tor/torrc
設定密碼以及 ControlPort
。
1 | ControlPort 9051 |
最後重啟服務來完成設定。
1 | pidof tor | xargs kill |
以上設定都完成後,就可以安裝 TOR 的 python wrapper torrequest
來進行程式開發了。程式為使用一般的請求以及 TOR 請求到 http://ipecho.net/plain 來觀察自己的 IP 位址有無變化。
1 | import requests |
程式執行的結果如下所示,可以發現每次 reset TOR 連線路徑後所獲得的來源 IP 都不一樣了!不過可惜的是就是速度太慢了,本實驗每次建立 tor 連線都要花上近 10 秒左右,要實際上給爬蟲使用效果很有限,但也學到新的一招就是了。
1 | my original ip: 1.162.217.109 |
reference