在进行安全测试时,一些网站会对我们发送的 奇葩请求 / 扫描 / 爆破 时进行拦截,这里可以尝试构建一个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!
******************************************************
小实验小结,具体测试利用方式需根据具体实践场景~