python網絡滲透,爬蟲獲取代理IP并檢驗可用性與識別指紋

 2023-10-18 阅读 32 评论 0

摘要:? 前段時間在做有關代理IP與路由器的學習,基于FreeBuf上feiniao的文章http://www.freebuf.com/articles/web/159172.html,自己總結并修改了部分代碼,實現了代理IP的爬取以及簡單的分析,在此將自己的動手過程簡單記錄下來。 ? ? ? 代理IP能實現IP隱

? 前段時間在做有關代理IP與路由器的學習,基于FreeBuf上feiniao的文章http://www.freebuf.com/articles/web/159172.html,自己總結并修改了部分代碼,實現了代理IP的爬取以及簡單的分析,在此將自己的動手過程簡單記錄下來。

? ? ? 代理IP能實現IP隱藏,通過大量獲取可用的代理IP,能夠實現反追蹤的滲透測試行為,在網絡上有許多搜索代理IP的網站,要獲取可用的代理IP,采取簡單的辦法,直接爬取那些網上的IP就行,http://www.xicidaili.com這個網站可以來進行代理IP的收集,需要注意的是,這個網站也采取了一定的反爬蟲機制,有時候會把進行爬蟲行為的主機IP給封掉,被封掉后再訪問這個網站只會出現一個“block”內容的頁面,在爬蟲的時候可以開啟全局代理,或者使用其他方法更換IP就好。


? ? ? 在獲取到代理IP之后,需要對IP的可用性進行驗證,因為獲取到的代理IP不是所有都是可用的,基于FreeBuf上的驗證方法,是使用每一個IP自己發送http包,將http的proxy設置成要驗證的代理IP,對百度www.baidu.com進行訪問,如果返回的數據包的應答值是200說明此IP可用,但是在使用的過程中也發現了一些問題,原文章中使用的get函數時延為10,但是有很多代理IP的反應速度比較慢,就算是可用的也會識別為不可用的。為什么不把時延值提高呢,是由于就算在10的時延下,程序運行起來也非常的慢,在和幾個同學一起做的過程中,發現平均驗證一個IP就要花掉2~4秒鐘,這種速率在我們3萬多條待驗證的代理IP下實在太慢,所以把時延調高的話就會更慢了。。。。。。

? ? ? 為了增快檢驗速度,稍微采取了一下多線程的方法,間隔0.1秒不斷生成檢驗可用性的線程,在這個情況下遍歷完、3萬多條IP大概要兩個小時,但是后面發現的一個問題是3萬多條IP中只檢測出來符合條件的只有30個左右,不太符合預期,可能是檢驗可用性的代碼設計本身的問題,具體如何改良后面沒有繼續深究,以后有時間會找一個更高效識別率更高的檢驗方法出來。

? ? ? 對檢驗到的可用的代理IP進行保存,使用代理IP構造http包,分析http響應包報頭,識別出服務器版本信息,當成代理IP的指紋。

? ? ? 整個流程的一次性實現代碼如下,在本人的PyCharm環境下驗證可有效運行。

#coding:utf-8
from requests import *
import re
import time
import _thread
pattern1 = re.compile(r'[0-9]{0}([0-9]|[.])*')
pattern = re.compile(r'\s+[0-9]+\s')
headers1 = { "accept":"text/html,application/xhtml+xml,application/xml;","accept-encoding":"gzip", "accept-language":"zh-cn,zh;q=0.8","referer":"Mozilla/5.0(compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)","connection":"keep-alive","user-agent":"mozilla/5.0(windows NT 6.1;wow64) applewebkit/537.36 (khtml,like gecko)chrome/42.0.2311.90 safari/537.36" }
headers2 = {"Host": "www.baidu.com","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0","Accept": "*/*","Accept-Language": "en-US,en;q=0.5","Accept-Encoding": "gzip, deflate","Referer": "https://www.baidu.com/"}
headers3 = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0","Accept": "*/*","Accept-Language": "en-US,en;q=0.5","Accept-Encoding": "gzip, deflate",}
urlb = 'https://www.baidu.com'
j=0
def fun(proxy):proxy = proxy.replace('\n', '')proxies = {"https": proxy}try:html = get(urlb, timeout=10, headers=headers2, proxies=proxies)if html.status_code == 200:proxy = proxy.split('https://')[1]f = open('proxyip.txt', 'a')f.write(proxy)f.write("\n")except Exception as e:print(e)pass
for i in range(1,835):url = 'http://www.xicidaili.com'url = url + '/wn/'url = url + str(i)html = get(url, timeout=100, headers=headers1)html.encoding = html.apparent_encodingproxyip = r'(<td>.*</td>)'iplist = re.findall(proxyip, html.text)for ip in iplist:ip = (ip.split('<td>')[1]).split('</td>')[0]f = open("ip.txt", 'a')if j%5==0:f.write("\n")f.write(ip)f.write("\t")else:f.write(ip)f.write("\t")j=j+1
print("IP 代理信息爬取完畢,開始提取IP地址與端口號.......")
time.sleep(3)
for line in open("ip.txt"):match1 = pattern1.match(line)match2 = pattern.findall(line)if match1 and match2:f=open("https.txt",'a')str="https://"+match1.group()+':'+match2[0].strip()f.write(str)f.write("\n")
print("Https代理格式文件生成完畢,開始檢驗是否可用.........")
time.sleep(3)
for line in open("https.txt",'r'):_thread.start_new_thread(fun,(line,))time.sleep(0.2)
print("可用性檢驗完畢,開始分析指紋信息.......")
time.sleep(3)
for url in open("proxyip.txt"):url = "http://"+ url.split('\n')[0]try:html = get(url,timeout=100,headers=headers3)html = html.headers['server']f = open("proxyanalysis.txt", 'a')f.write(url)f.write(html)f.write("\n")except Exception as e:pass
print("分析完畢")
? ? ? 運行后會生成四個txt文件,分別是ip.txt(初步爬到的代理IP信息,信息包括IP地址、端口號、代理協議類型、存活時間、爬取時間),https.txt是對ip.txt整理后得到的格式統一為https://IP地址:端口號的IP,然后對其進行可用性檢測,生成的可用IP保存在proxy.txt中,最后分析IP指紋,保存在proxyanalysis.txt中。最后得到的結果下:

http://180.173.71.250:9797Mikrotik HttpProxy
http://112.95.95.180:9999Mikrotik HttpProxy
http://183.51.191.22:9999Mikrotik HttpProxy
http://183.30.197.39:9797Mikrotik HttpProxy
http://123.138.89.133:9999Mikrotik HttpProxy
http://222.85.22.19:43080squid/3.5.20
http://218.20.55.168:9999Mikrotik HttpProxy
http://1.196.161.165:9999Mikrotik HttpProxy
http://211.159.171.58:80Apache/2.4.6 (CentOS)
http://61.144.102.150:9797Mikrotik HttpProxy
http://183.30.197.39:9797Mikrotik HttpProxy
http://58.220.95.107:8080Zscaler/6.0

? ? ? 以上的代碼存在著一些問題導致獲取到的可用代理IP數量過少,在今后的學習中會對其進行改良、尋找更高效的方法,獲取更多的代理IP,方便進行下一步的項目工作。


版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/156582.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息