前言
在渗透测试过程中,往往会遇到特别“小气”的目标,稍微碰一下就封IP。这种情况下,我们很自然的想到通过网上大量的免费代理进行IP隐匿。
那么问题来了,难道拿到哪些个代理,每用一次手动换下一个代理? 这太像火铳的工作方式了,想想就心累了。
so,小弟就来造一台机关枪,突突突突突… 想想就挺带感。
功能实现
代理功能
主要使用python内建的http.server和http.client库实现。
http.server相关的代码解读可参考我前一篇文章 Python源码分析之从SocketServer到SimpleHTTPServer
主要代理功能代码:
def do_GET(self):
if self.path == 'http://shadow.proxy/':
self.send_cacert()
# print("%s download %s" % (self.client_address, self.cacert))
return
req = self
content_length = int(req.headers.get('Content-Length', 0))
req_body = self.rfile.read(content_length) if content_length else None
if req.path[0] == '/':
if isinstance(self.connection, ssl.SSLSocket): # ssl.SSLSocket or ssl.SSLContext
req.path = "https://%s%s" % (req.headers['Host'], req.path)
else:
req.path = "http://%s%s" % (req.headers['Host'], req.path)
u = urlparse(req.path)
scheme, netloc= u.scheme, u.netloc
assert scheme in ("http", "https")
if netloc:
req.headers['Host'] = netloc
setattr(req, 'headers', self.filter_headers(req.headers))
retryFlag = 0
while retryFlag < 10 :
try:
target = (scheme, netloc)
# 输入URL的协议和主机,返回可用的连接HTTP(S)Connection
proxy = proxyCoor.dispatchProxy(target)
if proxy is None:
print("未能获取到可用Proxy...(可能是Proxy耗尽...)")
self.send_error(502,"proxy resource RUN OUT!!!")
return
print("%s --> [ %d ] %s" % (proxy, retryFlag + 1, req.path))
if proxy.split("://")[0] == "http":
conn = http.client.HTTPConnection(proxy.split("://")[1], timeout=self.timeout)
elif proxy.split("://")[0] == "https":
conn = http.client.HTTPSConnection(proxy.split("://")[1], timeout=self.timeout)
conn.request(self.command, req.path, req_body, dict(req.headers))
res = conn.getresponse()
# res.response_version = 'HTTP/1.1' if res.version == 11 else 'HTTP/1.0'
res_body = res.read() # Transfer-Encoding并不需要特殊处理(除了Content-Length外)
except Exception as e:
retryFlag += 1
# self.send_error(502)
# return
else:
try:
if 'Content-Length' not in res.headers:
res.headers['Content-Length'] = str(len(res_body))
setattr(res, 'headers', self.filter_headers(res.headers))
self.send_response_only(res.status, res.reason)
for keyword in res.headers:
self.send_header(keyword, res.headers.get(keyword, ""))
self.end_headers()
self.wfile.write(res_body)
self.wfile.flush()
except:
pass
finally:
retryFlag = 9999 # 极大值,结束重试。
conn.close()
# 其他方法重用GET的方法。
do_HEAD = do_GET
do_POST = do_GET
do_PUT = do_GET
do_DELETE = do_GET
do_OPTIONS = do_GET
do_TRACE = do_GET
代理协调者
主要实现:
导入代理列表
验证代理的可用性和匿名性
维护目标站点、代理列表二维表
根据维护的二维表,反馈可用的代理地址。
另外,我用的代理列表是从kuaidaili.com上爬取的,但代理的质量比较差,很头大。之前还用过xicidaili,情况也差不多。
验证公网IP的网站有如下几个:
ip.chinaz.com/getip.aspx
ifconfig.me/ip
api.ipify.org
ip.seeip.org
ifconfig.co/ip
myexternalip.com/raw
wtfismyip.com/text
icanhazip.com/
ipv4bot.whatismyipaddress.com/
ip4.seeip.org
测试验证
验证代码
透过shadowProxy访问http://ip.chinaz.com/getip.aspx,从而直观查看代理效果。
import requests
import time
i = 0
while True:
try:
i += 1
r =requests.get("http://ip.chinaz.com/getip.aspx",proxies={"http":"http://127.0.0.1:8088"},timeout=10)
if r.status_code == 200:
msg = "第 %d 次请求 \t%s"%(i,r.text)
else:
msg = "第 %d 次请求 \t%d"% (i, r.status_code)
time.sleep(2)
except KeyboardInterrupt:
print('\r***********************\n\t用户中断\t\n***********************')
break
except Exception as e:
msg = "第 %d 次请求 \t%s" % (i, e )
time.sleep(2)
finally:
print(msg)
效果展示
动图展示 : test_shadowProxy.gif
枪是好枪,但还是存在一些问题的。
缺弹少药 - 通过工具爬取到的代理很多重复,很多不可用,只有百八十个。
弹药质量差 - 获取到的代理,很多无法传输大数据包(中断),小包也不稳定。
机枪卡壳 - 由于上述问题,所以工具容错能力/重试功能有待提升。(后续考虑提升的点)
PS:后续代码完善后,可以考虑开源发布。
2018-01-10 Update
目前代理加入了自动重试功能,使其能更稳定的进行查询。
同时,找了个还算不错的proxylist。 github.com/fate0/proxy…
目前便可以比较顺畅的使用了:
开源发布
github.com/odboy/shado…
生成&安装证书
生成证书
shadowProxy git:(master) ✗ ll
total 112
-rw-r--r-- 1 bingo staff 573B Jan 10 16:42 PCtest.py
-rw-r--r-- 1 bingo staff 5.9K Jan 10 16:42 ProxyCoordinator.py
-rw-r--r-- 1 bingo staff 14B Jan 10 16:42 README.md
drwxr-xr-x 3 bingo staff 96B Jan 10 16:42 __pycache__
-rw-r--r-- 1 bingo staff 100B Jan 10 16:42 proxylist-4.txt
-rw-r--r-- 1 bingo staff 19K Jan 10 16:42 proxylist.txt
-rwxr-xr-x 1 bingo staff 302B Jan 10 16:42 setup_https_intercept.sh
-rw-r--r-- 1 bingo staff 11K Jan 10 16:42 shadowProxy.py
shadowProxy git:(master) ✗ ./setup_https_intercept.sh # 直接运行脚本,生成根证书
Generating RSA private key, 2048 bit long modulus
........................................................................................................................................+++
..................................................................+++
e is 65537 (0x10001)
Generating RSA private key, 2048 bit long modulus
.....................................................................................................................................+++
...................+++
e is 65537 (0x10001)
安装证书
在浏览器设置代理,指向 http://127.0.0.1:8088 , 然后访问 wanbianip.com/,即可弹出证书安装。(…)
安装后,可以访问https网站。
使用测试
➜ shadowProxy git:(master) ✗ python shadowProxy.py -h
.--.
|o_o | ------------------
|:_/ | < Author: Mr.Bingo >
// \ \ ------------------
(| | ) < oddboy.cn >
/'\_ _/`\ ------------------
\___)=(___/
usage: shadowProxy.py [-h] [--bind BIND] [--port PORT]
[--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
[--proxyListFile PROXYLISTFILE]
optional arguments:
-h, --help show this help message and exit
--bind BIND Default: 0.0.0.0
--port PORT Default: 8088
--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Default: WARNING
--proxyListFile PROXYLISTFILE
代理列表文件
➜ shadowProxy git:(master) ✗ python shadowProxy.py
.--.
|o_o | ------------------
|:_/ | < Author: Mr.Bingo >
// \ \ ------------------
(| | ) < oddboy.cn >
/'\_ _/`\ ------------------
\___)=(___/
初始化代理池 本地IP :: 36.110.16.74
导入代理池::: proxylist.txt
成功导入 110 个代理
Serving HTTP on 0.0.0.0 port 8088 (http://0.0.0.0:8088/) ...
直接访问站点进行测试。
由于该工具主要基于网上免费的代理进行IP隐匿的,所以稳定性仍然不够好,所以只建议用于特定的请求包测试。
相关文章内容简介
1 代理ip软件详细教程:如何使用代理服务器进行网页抓取?
全文共2136字,预计学习时长7分钟图源:Unsplash万维网是数据的宝库。大数据的易得性、数据分析软件的迅猛发展以及日益廉价的计算能力进一步提高了数据驱动战略对竞争差异化的重要性。据Forrester的报告显示,数据驱动性公司利用并贯彻公司洞察力以创造竞争优势,年均增长率超过30%,并有望在2021年实现1.8万亿美元的收入。麦肯锡公司的研究表明,善于利用客户行为洞察力的公司在销售增长方面比同行高出85%,毛利率高出25%。然而,互联网定期持续地提供内容。在寻找与需求相关的数据时,这会造成混乱。此时网页抓取有助于提取符合要求和喜好的有用数据。因此,以下的基本内容可以帮助了解如何使用网页抓取来收集信息,以及如何有效使用代理服务器。什么是网页抓取?网页抓取或网页采集是从网页中提取相关要求和大量数据的技术。该信息以电子表格的形式储存在本地计算机中。对企业根据获得的数据分析来计划营销战略来说,这是非常有远见的。网页抓取促使企业快速创新,实时访问万维网中的数据。因此,如果你是一家电子商务公司并且正在收集数据,那么网页抓取应用程序将帮助你在竞争对手的网站... [阅读全文]
2 代理IP软件Crawler如何选择IP代理软件。
当我们学习各种编程语言时,有各种各样的异常现象是很常见的。以最简单、最基本的爬虫数据采集为例,我们将面临许多问题,如IP被封、爬行受限、非法操作等,所以在抓取数据之前,我们必须了解预抓取网站是否涉及非法操作,找到合适的代理IP访问网站等等。爬虫特工IP就像选择一部手机。注意cpu参数,摄像头参数,显示参数等..爬虫代理ip是否也有这样一套指引??其实也有,极地代理商结合爬虫用户的需求,总结了以下经验:。1、IP池很大,都知道爬虫用户,补充业务用户,对IP的数量有很大的要求。如果IP池不够大,它将无法满足业务,或者由于重复提取,IP将被阻止。2、覆盖整个城市、爬行动物在整个区域的业务需求过程中,所以IP的需求必须覆盖大多数城市,每个城市都有一定的数量。3,高匿名性4.稳定、不稳定的连接,经常离线,我认为无论这个代理人多么便宜,你都不会买它,对吗?5、真正的IP,对于爬虫用户真正的IP效率,业务成功率遥遥领先。以上是对爬虫用户IP代理的几个总结,根据这个索引选择代理IP,可以帮助你跳过大部分的陷阱。掘金的数量无穷小的IP代理,稳定性高,是许多爬虫工人... [阅读全文]
推荐阅读
18
2017-09
哪个HTTP代理对IP代理软件有好处?哪个更好?
哪个HTTP代理对IP代理软件有好处?哪个更好?
19
2019-11
代理ip软件详细教程:如何使用代理服务器进行网页抓取?
代理ip软件详细教程:如何使用代理服务器进行网页抓取?
05
2017-05
软件IP代理扫描器在手,代理IP已全部可用。
软件IP代理扫描器在手,代理IP已全部可用。
02
2018-12
哪个好的代理IP是IP代理软件?哪个是好的?
哪个好的代理IP是IP代理软件?哪个是好的?
11
2018-02
软件IP代理代理ip如何维护你的隐私安全?
软件IP代理代理ip如何维护你的隐私安全?
31
2020-03
怎么辨别普通代理ip和短效代理ip?
代理IP是现在很多用户都需要的工具,很多地方都可以用的到。但代理IP也分为很多类型,不同类型的代理也有不同的区别。
热门文章
因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨
免费试用