爬蟲IP代理-設置ADSl撥號服務器代理


      什么是ADSL?

    • ADSL (Asymmetric Digital Subscriber Line ,非對稱數字用戶環路)是一種新的數據傳輸方式。它因為上行和下行帶寬不對稱,因此稱為非對稱數字用戶線環路。它采用頻分復用技術把普通的電話線分成了電話、上行和下行三個相對獨立的信道,從而避免了相互之間的干擾。


      他有個獨有的特點,每撥一次號,就獲取一個新的IP。也就是它的IP是不固定的,不過既然是撥號上網嘛,速度也是有保障的,用它搭建一個代理,那既能保證可用,又能自由控制撥號切換。


      如果你是用的ADSL上網方式,那就不用過多設置了,直接自己電腦調用一個撥號命令就好了,自動換IP,分分鍾解決封IP的事。


      然而,你可能說?我家寬帶啊,我連得公司無線啊,我蹭的網上的啊!那咋辦?


      這時,你就需要一台VPS撥號主機。


      購買服務器 

      某度廣告做的那么好是吧?一搜一片,這點谷歌可是遠遠比不上啊。


      於是乎,我就搜了搜,鍵入:撥號服務器,有什么騎士互聯啊、無極網絡啊、掛機寶啊等等的。我選了個價錢還湊合的,選了個無極網絡(這里不是在打廣告),80一個月的配置,一天兩塊錢多點。


      2核、512M內存,10M帶寬。


      下面是鏈接:


      無極網絡撥號VPS


      大家覺得有更便宜的更好用請告訴我呀!


      接下來開始裝操作系統,進入后台,有一個自助裝系統的頁面。

      我裝的CentOS的,在后面設置代理啊,定時任務啊,遠程SSH管理啊之類的比較方便。如果你想用Windows,能配置好代理那也沒問題。


      有的小伙伴可能會問了,既然它的IP是撥號變化的,你咋用SSH連?其實服務商提供了一個域名,做了動態解析和端口映射,映射到這台主機的22端口就好了,所以不用擔心IP變化導致SSH斷開的問題。


      好了裝好了服務器之后,服務商提供了一個ADSL的撥號操作過程,用pppoe命令都可以完成,如果你的是Linux的主機一般都是用這個。然后服務商還會給給你一個撥號賬號和密碼。


      那么接下來就是試下撥號了。


      服務商會提供詳細的撥號流程說明。


      比如無極的是這樣的:


      撥號流程


      設置好了之后,就有幾個關鍵命令:



      1

      2

      3


      pppoe-start 撥號

      pppoe-stop斷開撥號

      pppoe-status 撥號連接狀態



      如果想重新撥號,那就執行stop、start就可以了。


      反復執行,然后查看下ip地址,你會發現撥號一次換一個IP,是不是爽翻了!


      好,那接下來就設置代理吧。


      設置代理服務器 

      之前總是用別人的代理,沒自己設置過吧?那么接下來我們就來親自搭建HTTP代理。


      Linux下搭建HTTP代理,推薦Squid和TinyProxy。都非常好配置,你想用哪個都行,且聽我慢慢道來。


      我的系統是CentOS,以它為例進行說明。


      Squid 

      首先利用yum安裝squid



      1


      yum -y install squid



      設置開機啟動



      1


      chkconfig --level 35 squid on



      修改配置文件



      1


      vi/etc/squid/squid.conf



      修改如下幾個部分:



      1

      2

      3


      http_access allow !Safe_ports#deny改成allow

      http_access allow CONNECT !SSL_ports#deny改成allow

      http_access allow all#deny改成allow



      其他的不需要過多配置。


      啟動squid



      1


      sudo service squid start



      如此一來配置就完成了。


      代理使用的端口是3128


      TinyProxy 

      首先添加一下鏡像源,然后安裝



      1

      2

      3


      rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

      yum update

      yum install tinyproxy



      修改配置



      1


      vi /etc/tinyproxy/tinyproxy.conf



      可以修改端口和允許的IP,如果想任意主機都連接那就把Allow這一行注釋掉。



      1

      2

      3

      4


      Port 8888 #預設是8888 Port,你可以更改

      Allow 127.0.0.1 #將127.0.0.1改成你自己的IP

      #例如你的IP 是1.2.3.4,你改成Allow 1.2.3.4,那只有你才可以連上這個Proxy

      #若你想任何IP都可以臉到Proxy在Allow前面打#注釋



      啟動TinyProxy



      1


      service tinyproxy start




      好了,兩個代理都配置好了。


      你想用那個都可以!


      不過你以為這樣就完了嗎?太天真了,我被困擾了好幾天,怎么都連不上,我還在懷疑是不是我哪里設置得不對?各種搜,一直以為是哪里配置有遺漏,后來發現是iptables的鍋,萬惡的防火牆。踩過的的坑,那就不要讓大家踩了,用下面的命令設置下iptables,放行3128和8888端口就好了。



      1

      2

      3

      4

      5

      6


      service iptables save

      systemctl stop firewalld

      systemctl disablefirewalld

      systemctl start iptables

      systemctl status iptables

      systemctl enable iptables



      修改iptables配置



      1


      vi /etc/sysconfig/iptables





      1


      -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT



      的下面添加兩條規則



      1

      2


      -A IN_public_allow -p tcp -m tcp --dport 3128 -m conntrack --ctstate NEW -j ACCEPT

      -A IN_public_allow -p tcp -m tcp --dport 8888 -m conntrack --ctstate NEW -j ACCEPT



      如圖所示

      保存,然后重啟iptables



      1


      sudo service iptabels restart



      輸入


      ifconfig得到IP地址,在其他的主機上輸入



      1


      curl -x IP:8888 www.baidu.com



      測試一下,如果能出現結果,那就說明沒問題。

      如果怎么配都連不上,那干脆關了你的防火牆吧。雖然不推薦。


      連接代理 

      接下來才是重頭戲,你咋知道你的服務器IP現在到底是多少啊?撥一次號IP就換一次,那這還了得?


      如果服務商提供了端口映射!那一切都解決了!直接用端口映射過去就好了。然而,我的並沒有。


      自力更生,艱苦創業!


      首先我研究了一下DDNS服務,也就是動態域名解析。即使你的IP在變化,那也可以通過一個域名來映射過來。


      原理簡單而統一:當前撥號主機定時向一個固定的服務器發請求,服務器獲取remote_addr就好了,可以做到定時更新和解析。


      那么我找了一下,國內做的比較好的就是花生殼了,然后又找到了DNSPOD的接口解析。


      下面簡單說下我的折騰過程,大家可以先不用試,后面有更有效的方法。


      花生殼 

      現在花生殼出到3.0版本了,有免費版和付費版之分,我就試用了一下免費版的。這里是花生殼的一些配置和下載:


      花生殼配置


      下載花生殼客戶端之后,會生成SN碼,用這個在花生殼的官網登錄后,會分配給你一個免費的域名。


      接下來這個域名就能解析到你的主機了。


      DNSPOD 

      DNSPOD原理也是一樣,不過好處是你可以配置自己的域名。


      在GitHub上有腳本可以使用。


      腳本鏈接


      具體的細節我就不說了,實際上就是定時請求,利用remote_addr更新DNSPOD記錄,做到動態解析。


      解析接口


      不過!這兩個有個通病!慢!


      什么慢?解析慢!但這不是他們的鍋,因為DNS修改后完全生效就是需要一定的時間,這一秒你撥號了,然后更新了IP,但是域名可能還是解析着原來的IP,需要過幾分鍾才能變過來。這能忍嗎?


      我可是在跑爬蟲啊,這還能忍?


      自力更生 

      嗯,V2EX果然是個好地方,逛了一下,收獲不小。


      鏈接在此


      參考了abelyao 的思路,自己寫了腳本來獲取IP,保證秒級更新!


      此時,你還需要另一台固定IP的主機或者某個雲服務器,只要是地址固定的就好。在這里我用了另一台有固定IP的阿里雲主機,當然你如果有什么新浪雲啊之類的也可以。


      那么現在的思路就是,撥號VPS定時撥號換IP,然后請求阿里雲主機,阿里雲主機獲取VPS的IP地址即可。


      撥號VPS做的事情:


      定時撥號,定時請求服務器。使用bash腳本,然后crontab定時執行。


      遠程服務器:


      接收請求,獲取remote_addr,保存起來。使用Flask搭建服務器,接收請求。


      廢話少說,上代碼


      AutoProxy


      功能 

      由於DDNS生效時間過長,對於爬蟲等一些時間要求比較緊迫的項目就不太適用,為此本項目根據DDNS基本原理來實現實時獲取ADSL撥號主機IP。


      基本原理 

      client文件夾由ADSL撥號客戶機運行。它會定時執行撥號操作,然后請求某個固定地址的服務器,以便讓服務器獲取ADSL撥號客戶機的IP,主要是定時bash腳本運行。


      server文件夾是服務器端運行,利用Python的Flask搭建服務器,然后接收ADSL撥號客戶機的請求,得到remote_addr,獲取客戶機撥號后的IP。


      項目結構 
      serverconfig.py 配置文件。 
      ip 客戶端請求后獲取的客戶端IP,文本保存。 
      main.py Flask主程序,提供兩個接口,一個是接收客戶端請求,然后將IP保存,另外一個是獲取當前保存的IP。 clientcrontab 定時任務命令示例。 
      pppoe.sh 撥號腳本,主要是實現重新撥號的幾個命令。 
      request.sh 請求服務器的腳本,主要是實現撥號后請求服務器的操作。 
      reqeust.conf 配置文件。 使用 
      服務器 

      服務器提供兩個功能,record方法是客戶機定時請求,然后獲取客戶機IP並保存。proxy方法是供我們自己用,返回保存的客戶機IP,提取代理。


      克隆項目



      1


      git clone https://github.com/Germey/AutoProxy.gi



      修改配置


      修改config.py文件

      KEY 是客戶端請求服務器時的憑證,在client的reqeust.conf也有相同的配置,二者保持一致即可。 
      NEED_AUTH 在獲取當前保存的IP(即代理的IP)的時候,為防止自己的主機代理被濫用,在獲取IP的時候,需要加權限驗證。 
      AUTH_USER和AUTH_PASSWORD分別是認證用戶名密碼。 
      PORT默認端口,返回保存的結果中會自動添加這個端口,組成一個IP:PORT的代理形式。 運行 

      1

      2


      cd server

      nohup python main.py



      ADSL客戶機


      克隆項目



      1


      git clone https://github.com/Germey/AutoProxy.git



      修改配置


      修改reqeust.conf文件

      KEY 是客戶端請求服務器時的憑證,在server的config.py也有相同的配置,二者保持一致即可。 
      SERVER是服務器項目運行后的地址,一般為http://<服務器IP>/record。如http://120.27.14.24/record。

      修改pppoe.sh文件


      這里面寫上重新撥號的幾條命令,記得在前兩行配置一下環境變量,配置上撥號命令所在的目錄,以防出現腳本無法運行的問題。


      運行 

      設置定時任務



      1


      crontab -e



      輸入crontab的實例命令



      1


      */5 * * * * /var/py/AutoProxy/client/request.sh /var/py/AutoProxy/client/request.conf >> /var/py/AutoProxy/client/request.log



      注意修改路徑,你的項目在哪里,都統一修改成自己項目的路徑。


      最前面的*/5是5分鍾執行一次。


      好了,保存之后,定時任務就會開啟。


      驗證結果 

      這樣一來,訪問服務器地址,就可以得到ADSL撥號客戶機的IP了。



      1

      2

      3

      4

      5


      import requests

      url = 'http://120.27.14.24:5000'

      proxy = requests.get(url, auth=('admin', '123')).text

      print(proxy)



      實例結果:



      1


      116.208.97.22:8888



      擴展 

      如果你有域名,可以自己解析一個域名,這樣就可以直接請求自己的域名,拿到實時好用的代理了,而且定時更新。


      Python爬蟲進階七之設置ADSL撥號服務器代理_Python


      代理設置 
      urllib2 

      1

      2

      3

      4

      5

      6


      import urllib2

      proxy_handler = urllib2.ProxyHandler({"http": 'http://' + proxy})

      opener = urllib2.build_opener(proxy_handler)

      urllib2.install_opener(opener)

      response = urllib2.urlopen('http://httpbin.org/get')

      print response.read()




      requests 

      1

      2

      3

      4

      5

      6


      import requests

      proxies = {

      'http': 'http://' + proxy,

      }

      r = requests.get('http://httpbin.org/get', proxies=proxies)

      print(r.text)




      以上便秒級解決了動態IP解析,自己實現了一遍DDNS,爽!


      那這樣以來,以后就可以直接請求你的主機獲取一個最新可用的代理IP了,穩定可用,定時變化!


      以上便是ADSL撥號服務器配置的全過程,希望對大家有幫助!

    • 以上是

Python爬蟲進階七之設置ADSL撥號服務器代理

      的內容,更多 

進階 爬蟲 撥號 設置 服務器 代理 Python adsl 

      的內容,請您使用右上方搜索功能獲取相關信息。

 


免責聲明!

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



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