windows下安装中间人mitmproxy,亲测总结

mitmproxy 是什么?

mitmproxy 就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the-middle attack)。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为。

不同于 fiddler 或 wireshark 等抓包工具,mitmproxy 不仅可以截获请求帮助开发者查看、分析,更可以通过自定义脚本进行二次开发。举例来说,利用 fiddler 可以过滤出浏览器对某个特定 url 的请求,并查看、分析其数据,但实现不了高度定制化的需求,类似于:“截获对浏览器对该 url 的请求,将返回内容置空,并将真实的返回内容存到某个数据库,出现异常时发出邮件通知”。而对于 mitmproxy,这样的需求可以通过载入自定义 python 脚本轻松实现。

但 mitmproxy 并不会真的对无辜的人发起中间人攻击,由于 mitmproxy 工作在 HTTP 层,而当前 HTTPS 的普及让客户端拥有了检测并规避中间人攻击的能力,所以要让 mitmproxy 能够正常工作,必须要让客户端(APP 或浏览器)主动信任 mitmproxy 的 SSL 证书,或忽略证书异常,这也就意味着 APP 或浏览器是属于开发者本人的——显而易见,这不是在做黑产,而是在做开发或测试。

那这样的工具有什么实际意义呢?据我所知目前比较广泛的应用是做仿真爬虫,即利用手机模拟器、无头浏览器来爬取 APP 或网站的数据,mitmproxy 作为代理可以拦截、存储爬虫获取到的数据,或修改数据调整爬虫的行为。

事实上,以上说的仅是 mitmproxy 以正向代理模式工作的情况,通过调整配置,mitmproxy 还可以作为透明代理、反向代理、上游代理、SOCKS 代理等,但这些工作模式针对 mitmproxy 来说似乎不大常用,故本文仅讨论正向代理模式。

 

第一步安装mitmproxy

github地址:https://github.com/mitmproxy/mitmproxy/releases/

下载后双击安装即可。

安装后在网页上显示

同时电脑上会有个ui界面:

第二步:设置手机代理部分:下载安装证书: 

手机连接电脑同一wifi,进入手机WiFi设置里,设置手动代理,输入本机IP和端口号8080。

打开手机浏览器:输入http://mitm.it/   

根据图表点击自己手机对应的证书,进行安装。

我是ios,安装完后会自动弹出安装的弹窗,根据弹窗安装,并且选择信任即可。

安装好后,手机随意打开一个app,就可以在网页http://127.0.0.1:8081  上看到对应的请求信息。

 

注意,在Windows上不支持mitmproxy的控制台接口,但是可以使用mitmdump和mitmweb。

开启mitmproxy

以后开启mitmproxy,在windows上,只要在cmd中运行mitmdump,同时在另一个cmd中运行mitmweb,就可以在网页上看到请求详情。

####

使用mitmproxy的一个重要目的是修改网页请求和响应,通过重写request方法处理请求数据包,通过重写response方法处理响应数据包(获取数据保存,就是爬虫啦)。

可以把重写的代码放到py文件中,然后用mitmproxy运行,比如我们在爬取淘宝的时候可以这样写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)

更多关于mitmproxy的实际使用过程,可以参考:https://blog.wolfogre.com/posts/usage-of-mitmproxy/

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值