是什么?
就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the- )。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为。
不同于 或 等抓包工具, 不仅可以截获请求帮助开发者查看、分析,更可以通过自定义脚本进行二次开发。举例来说,利用 可以过滤出浏览器对某个特定 url 的请求,并查看、分析其数据,但实现不了高度定制化的需求,类似于:“截获对浏览器对该 url 的请求,将返回内容置空,并将真实的返回内容存到某个数据库,出现异常时发出邮件通知”。而对于 ,这样的需求可以通过载入自定义 脚本轻松实现。
但 并不会真的对无辜的人发起中间人攻击,由于 工作在 HTTP 层,而当前 HTTPS 的普及让客户端拥有了检测并规避中间人攻击的能力,所以要让 能够正常工作,必须要让客户端(APP 或浏览器)主动信任 的 SSL 证书,或忽略证书异常,这也就意味着 APP 或浏览器是属于开发者本人的——显而易见,这不是在做黑产,而是在做开发或测试。
那这样的工具有什么实际意义呢?据我所知目前比较广泛的应用是做仿真爬虫,即利用手机模拟器、无头浏览器来爬取 APP 或网站的数据, 作为代理可以拦截、存储爬虫获取到的数据,或修改数据调整爬虫的行为。
事实上,以上说的仅是 以正向代理模式工作的情况,通过调整配置, 还可以作为透明代理、反向代理、上游代理、SOCKS 代理等,但这些工作模式针对 来说似乎不大常用,故本文仅讨论正向代理模式。
第一步安装
地址:
下载后双击安装即可。
安装后在网页上显示
同时电脑上会有个ui界面:
第二步:设置手机代理部分:下载安装证书:
手机连接电脑同一wifi,进入手机WiFi设置里,设置手动代理,输入本机IP和端口号8080。
打开手机浏览器:输入
根据图表点击自己手机对应的证书,进行安装。
我是ios,安装完后会自动弹出安装的弹窗,根据弹窗安装,并且选择信任即可。
安装好后,手机随意打开一个app,就可以在网页:8081 上看到对应的请求信息。
注意,在上不支持的控制台接口,但是可以使用和。
开启
以后开启,在上,只要在cmd中运行,同时在另一个cmd中运行,就可以在网页上看到请求详情。
####
使用的一个重要目的是修改网页请求和响应,通过重写方法处理请求数据包,通过重写方法处理响应数据包(获取数据保存,就是爬虫啦)。
可以把重写的代码放到py文件中,然后用运行,比如我们在爬取淘宝的时候可以这样写Proxy.py:
TARGET_URL = 'https://g.alicdn.com/secdev/sufei_data/3.6.11/index.js' #这个是淘宝的index.js文件的
INJECT_TEXT = 'Object.defineProperties(navigator,{webdriver:{get:() => false}});' #js执行文件
def response(flow):
if flow.request.url.startswith(TARGET_URL):
flow.response.text = INJECT_TEXT + flow.response.text
print('注入成功')
if 'um.js' in flow.request.url or '115.js' in flow.request.url:
# 屏蔽selenium检测
flow.response.text = flow.response.text + INJECT_TEXT
之后运行Proxy.py 如下:
mitmdump -s Proxy.py -p 9000 #执行Proxy文件,-p开启9000代理端口,在selenium中设置 127.0.0.1:9000代理即可。
而在我们爬取的脚本中,可以这样设置:
option = webdriver.ChromeOptions()
option.add_argument('--proxy-server=127.0.0.1:9000')
browser = webdriver.Chrome(options=option)
更多关于的实际使用过程,可以参考: