Tor網絡突破IP封鎖,爬蟲好搭檔【入門手冊】


前言

  本文不提供任何搭梯子之類的內容,我在這里僅僅討論網絡爬蟲遇到的IP封殺,然后使用Tor如何對抗這種封殺。作為一種技術上的研究討論。

場景

   我們編寫的網絡爬蟲全網采集的時候總會有一些網站有意識的保護自己的網站內容,以防止網絡爬蟲的抓取。常見的方式就是通過身份驗證的方式來進行人機識別。也就是在登陸(查詢)的入口增加或者加固防御。這些防御有那些呢?我目前見到的有:各種驗證碼、參數的加密、在前端JS挖坑、訪問頻率限制(IP黑名單)等。

  其實前面的幾種我們在某些情況下都是有辦法解決的,我一一舉例:

  1、加密參數。其實老司機們都知道了,在客戶端加密參數並沒有什么卵用。因為爬蟲完全可以將前端的js丟到一個游覽器的內核環境中去執行js,這樣的話,無論你怎么加密,都沒有用,因為這和在游覽器中運行沒有什么區別,是無法進行人機識別的。

  2、前端在Js腳本中挖坑。這是一些小聰明了,畢竟被抓取的網站方是這場戰爭的游戲規則制定者,他們能夠自己制定規則,然后在沒有什么漏洞的情況下,爬蟲只能按照對方指定的規則一條條的來,一個坎一個坎的去跨。

  這種情況下,網站開發人員在一大堆的js中藏着一小段預警js作為地雷。畢竟一般情況下,爬蟲都是直接請求后得到的響應是一段html的文本,並不會執行其中的js。那么這樣就區分出來了,網站方可以在頁面加載后執行一段js,這段js不用和服務器通信,就是默默的執行。若是這段js執行了,說明訪問者很可能是人,若是沒有執行,那么這個訪問真絕對是爬蟲了。我們在正文請求中附帶上的cookie中加上一個特定的標記。告訴服務器這個請求不是人發起的。服務器得到這個消息后,針對IP標記,但是這次請求是允許通過的(隱藏我們的判斷依據)。下次或者這個IP訪問幾次后,就將這個IP拉入黑名單。 

    3、驗證碼,這東西是主要防御手段,這里不多說,我博客里面也有一篇關於這個文章。但是,只要技術能力足夠,驗證碼還是會被突破的。君不見,12306驗證碼防御也沒什么用。

  4、IP黑名單,這個是依賴於上面的一個后台防御策略。但是再某種情況下,這種策略確實很有效,而且無解。

  比如:有一個查詢類的網站,通過限制IP的訪問次數、頻率就完全可以封鎖或者限制爬蟲,因為爬蟲的意義就是自動化的、高效的得到數據。

IP黑名單突破的方案

     針對於采用黑名單的網站,我們可以使用的策略就是代理了,我們用各種方式弄到一大批的代理IP,然后通過使用這些代理IP去發起請求,IP被封鎖了,就換下一個。

  我們的主題,Tor網絡也就用在這里了。

  首先來科普一下:

 

關於Tor網絡

官網:https://www.torproject.org/

 

Tor是什么

  Tor是互聯網上用於保護您隱私最有力的工具之一,但是時至今日仍有許多人往往認為Tor是一個終端加密工具。事實上,Tor是用來匿名瀏覽網頁和郵件發送(並非是郵件內容加密)的。今天,我們要討論一下Tor的是如何工作的、它做什么、不會做什么,以及我們該如何正確地使用它。

Tor的工作原理是這樣的

當你通過Tor發送郵件時, tor會使用一種稱為“洋蔥路由”的加密技術通過網絡隨機生成的過程傳送郵件。這有點像在一疊信中放了一封密信。網絡中的每個節點都會解密消息(打開的最外信封),然后發送內部加密的內容(內密封的信封)至其下一個地址。這導致如果單看一個節點是看不了信的全部內容,並且該消息的傳送路徑難以追蹤。

 

 在Windows上使用Tor

   windows上安裝tor很簡單,去Tor的官網下載安裝洋蔥游覽器就可以了。

       當然,我們可以只安裝Tor核心,不安裝任何其他附屬,然后我們去找個Tor控制器,去操作Tor就可以了。

       我這里有兩個版本Tor控制器,Windows的Vidalia和OS X版本的Arm(Anonymizing Relay Monitor)這東西就Python開發的,可以完成Vidalia的絕大部分功能。

windows上的Vidalia:

 

 Mac上的Arm:

  目前我使用的也就是在Mac上操作的Arm。我也是重點說Arm的。因為Window下的Tor通過C#或者Python控制都不行,不得已的情況下,換到了OS X/Linux的環境下來控制Tor。

安裝Tor、Arm

  首先我們得下載安裝了,好消息是,Arm和Tor大部分的包管理器都有,我們可以直接下載。通過包管理器下載后,會自動安裝,並完成初始化配置。

  例如我在Mac上的安裝以及配置:

brew install tor
brew install arm

 我們另外需要安裝Privoxy,需要通過Privoxy來將Socks5轉換成Http。

brew install Privoxy

最后,我們還需要一個前置代理,因為Tor網絡,在國內是不能訪問的。所以我們需要一個在國外的前置代理,目前我自己已經搭建好了一個位於加拿大的VPN,這里可以直接用的。

配置Tor、Arm

  我們需要做一些配置,我先給一張我的配置圖:

這是從已經配置好的Arm看到的。如上圖,綠色的字體就是我給torrc配置文件增加的內容。

我們修改配置就是在 /Users/ Likeli/.arm/torrc 路徑(Mac下的路徑)。完成以上修改。

關於重要參數的說明:

參數 說明
ControlPort 控制程序訪問的端口(重要)
Socks5Proxy 前置代理端口
SocksProt 外部程序訪問Tor的端口
MaxCircuitDirtiness 自動切換Identity的時間間隔

 

 

 

 

除了這些參數,其實還有很多的備選參數,詳細說明請查看tor幫助文檔,以上配置也是我從tor的官方幫助文檔中找到的。

man tor

好了,配置完成了,現在去出去啟動Arm,完成初始化。

在終端運行Arm,我直接用Mac 的截圖工具,貌似不能構繪制圓圈勾選,這里提供幾張別出弄來的圖,按照選擇就ok了。

Arm配置源地址:https://program-think.blogspot.com/2015/03/Tor-Arm.html?utm_source=tuicool&utm_medium=referral

 

 

配置好了,然后啟動,啟動成功后如下圖:

下方的啟動日志顯示,啟動進度100%。

好了,到這一步,其實代理已經通了,來測一測。

  好了,搞定了,目前Tor的Socks5代理已經接通,我們直接連接127.0.0.1:9000就可以了。這里的端口是自己根據上面的配置來的。

收尾

  雖然代理通了,但是還有問題,因為一般我們都是用的Http的代理。所以我們需要將Socks5代理轉換成Http代理來方便我們的應用程序使用。

  這里用到的工具是:Privoxy(上面的步驟中,已經通過軟件庫安裝了)

  我們需要對這個做一下一點點配置修改。

我們安裝Privoxy后,打開它的配置文件:

打開后,搜索 127.0.0.1:9050

找到下圖中的為之后,另起一行,插入 forward-socks5 / 127.0.0.1:9000  .

配置完成后保存關閉,若是我們嘗試連接本地的8118端口,也就是 127.0.0.1:8118

若是連接不上,重啟一下服務,或者重啟電腦。

這里的8118端口也是可以修改的,若是修改,請直接在Privoxy的配置文件中搜索127.0.0.1:8118,並修改8118端口就可以了。

到這里我們就完成了所有的配置了,任何程序直接訪問127.0.0.1:8118,並將至設置為代理,就可以躲避網站的IP限制了。

最后

  以上中測試代理可以在Chrome中安裝SwitchySharp插件,然后稍加配置就可以了。

  好了,自由享受無限IP的刺激把,如此以后,IP黑名單(IP封鎖)形同虛設~

   最后附上Python控制Tor切換IP的樣例代碼:來源(https://stackoverflow.com/questions/9887505/how-to-change-tor-identity-in-python

復制代碼
 1 import urllib2
 2 from TorCtl import TorCtl
 3 
 4 proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
 5 opener = urllib2.build_opener(proxy_support) 
 6 
 7 def newId():
 8     conn = TorCtl.connect(controlAddr="127.0.0.1", controlPort=9051, passphrase="your_password")
 9     conn.send_signal("NEWNYM")
10 
11 for i in range(0, 10):
12     print "case "+str(i+1)
13     newId()
14     proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
15     urllib2.install_opener(opener)
16     print(urllib2.urlopen("http://www.ifconfig.me/ip").read())
復制代碼

 

作者: 憤怒的TryCatch
        請尊重別人的勞動成果,讓分享成為一種美德,歡迎轉載。另外,文章在表述和代碼方面如有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM