使用Python配置Tor
背景介紹:
如果你曾經寫過網絡爬蟲,那么你一定遇到過因生成過多請求而被對方服務器阻止的問題,或者你只是想隱藏真實 IP 地址并自動化運行你的腳本。
本文將解釋如何在 Linux 系統上配置 TOR,以及如何使用 Python 腳本實現 TOR 以隱藏你的真實 IP 并繞過基于 IP 的限制。
TOR是個啥?
“Tor是洋蔥路由器(The Onion Router)的簡稱,是一款免費開源的匿名通信軟件。”Tor網絡是一種安全的加密協議,可以確保網絡上數據和通信的私密性。
Tor 服務/瀏覽器使用稱為洋蔥路由的技術,洋蔥路由器是一種點對點 (P2P) 覆蓋網絡,使用戶能夠匿名瀏覽互聯網,通過網絡發送信息的來源和目的地可以利用洋蔥路由使用多層加密實現隱藏。
TOR 網絡通常需要使用 TOR 瀏覽器訪問,但如果你想在 Python 腳本中使用它并通過 TOR 網絡運行自動化腳本該怎么辦?這正是我們今天這篇文章要講的!
TOR 安裝
首先Tor的安裝取決于你的操作系統,官網有詳細說明,對于大多數基于 Debian 的操作系統,操作起來基本都非常方便。
sudo apt-get install tor
要啟動Tor服務,運行:
sudo service tor start
如果要檢查服務是否有效,只需運行如下命令:
curl --socks5 localhost:9050 --socks5-hostname localhost:9050 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs
如果一切正常,你會看到如下內容:
Congratulations. This browser is configured to use Tor.
使用Python進行配置
安裝 Python 相關請求模塊,可用于后續 TOR 網絡請求發送:
sudo pip3 install requestssudo pip3 install requests[socks]sudo pip3 install requests[security]sudo pip3 install cryptography
使用請求模塊:
import requests
可以使用下方命令在沒有 Tor 的情況下檢查你的 IP 地址:
requests.get('https://ident.me').text
輸出的結果會是你的真實 IP 地址。
要在 Python 腳本中使用 TOR 網絡,首先需要告訴 Python 使用代理:
proxies = { 'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'}
現在,你會得到一個新的 IP 地址:
requests.get('https://ident.me', proxies=proxies).text
獲取新身份
我們需要在每次發出新請求時或以固定的時間間隔獲取新的 IP 地址,因此我們需要一個名為“Stem”的 Python 模塊。
Stem 是 Tor 的 Python 控制器庫,有了它我們就可以使用 Tor 的控制協議來編寫針對 Tor 進程的腳本。
為了更加匿名,我們可以使用“Fake UserAgent”模塊為每個請求生成一個新的用戶代理,這兩個模塊均可使用 pip 安裝:
sudo pip3 install stemsudo pip3 install fake_useragent
Tor 控制器還必須配置為請求身份更新。
sudo nano /etc/tor/torrc
將以下內容寫入 /etc/tor/torrc 文件中:
ControlPort 9051CookieAuthentication
然后重新啟動 Tor 以使這些修改生效:
sudo seice tor restart
腳本整合
首先,導入所需模塊:
import timeimport requestsfrom fake_useragent import UserAgentfrom stem import Signalfrom stem.control import Controller
然后定義代理:
proxies = { 'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'}
現在將為 Stem Controller 定義一個 Handler,使用該處理程序,將驗證我們的請求并生成信號以獲取新 IP 地址:
with Controller.from_port(port = 9051) as c: c.authenticate() c.signal(Signal.NEWNYM)
以下是完整代碼:
import timeimport requestsfrom fake_useragent import UserAgentfrom stem import Signalfrom stem.control import Controllerproxies = { 'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'}print("Changing IP Address in every 10 seconds....\n\n")while True: headers = { 'User-Agent': UserAgent().random } time.sleep(10) with Controller.from_port(port = 9051) as c: c.authenticate() c.signal(Signal.NEWNYM) print(f"Your IP is : {requests.get('https://ident.me', proxies=proxies, headers=headers).text} || User Agent is : {headers['User-Agent']}")
代碼將每10秒生成一個新IP地址,并在每個請求中生成一個新的用戶代理。

工具用途
有很多場景可以使用該工具,例如:
- 在不被阻止的情況下爬取普通 Web 頁面
- 制作暗網爬蟲
- 掩藏 IP 地址
- 更多功能待你發現…..
So,你學廢了么?