在進行安全測試時,一些網站會對我們發送的 奇葩請求 / 掃描 / 爆破 時進行攔截,這裏可以嘗試構建一個ip代理池,無論是網絡爬蟲還是請求發送,都能很好地解決這些問題
(爬蟲時請求包header中的User-Agent可通過抓包複製粘貼)
代碼如下:
# -*- coding:utf-8 -*-
import requests
import re
from bs4 import BeautifulSoup as bs
import telnetlib
#爬取數據
def proxy_spider():
#設置請求
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}
url = 'https://www.xicidaili.com/nn'
r = requests.get(url=url, headers=headers)
print (r)
#解析 通過re.compile('|[^odd]')解析奇數和偶數行
soup = bs(r.content, 'html.parser')
datas = soup.find_all(name='tr', attrs={'class': re.compile('|[^odd]')})
for data in datas:
soup_proxy_content = bs(str(data), 'html.parser')
soup_proxys = soup_proxy_content.find_all(name='td')
ip = str(soup_proxys[1].string)
port = str(soup_proxys[2].string)
types = str(soup_proxys[5].string)
#print ip, port, types
#判斷IP地址是否存活
proxy = {}
proxy[types.lower()] = '%s:%s' % (ip, port)
proxy_telnet(ip, port, types)
#檢測IP地址是否存活
def proxy_telnet(ip, port, types):
proxy = {}
proxy[types.lower()] = '%s:%s' % (ip, port)
try:
telnetlib.Telnet(ip, port, timeout=3)
print ('True:', proxy)
except:
print ('False:', proxy)
proxy_spider()
如果想要獲取能成功使用的代理ip內容,可添加proxy_check(ip, port, types)
調用requests代理訪問方法。
def proxy_check(ip, port, types):
proxy = {}
proxy[types.lower()] = '%s:%s' % (ip, port)
#proxy = {'https':'203.208.41.106:443'}
try:
r = requests.get('https://www.xicidaili.com/nn', proxies=proxy, timeout=6)
#print r.text
ip_content = re.findall(r"\[(.*?)\]", r.text)[0]
if ip == ip_content:
print (proxy)
except Exception as e:
print (e)
pass
大部分獲取的IP好像都不可行。
不過代碼是沒問題的,因爲我用該代碼配合存活網站的IP來測試是成功的,也許需要爬取另外的代理IP網站
GOT IT!
******************************************************
小實驗小結,具體測試利用方式需根據具體實踐場景~