mitmproxy入门一、python3.10下安装及代理请求修改
一、安装mitmproxy
实验环境:python3.10.11
直接pip install mitmproxy进行安装
安装后打开新的cmd窗口直接输入mitmproxy、mitmweb等命令发现提示不是内部或外部命令,需要添加环境变量。
二、添加系统环境变量
1、先找到mitmproxy安装位置,可以用everything搜索所在文件夹
2、在“此电脑”右键“属性”,然后在弹出的关于页面往下翻到打开“高级系统设置”进行系统变量添加,保存后重新打开cmd窗口执行命令即可
三、安装mitmproxy相关证书以便可以代理https请求
上面一步已经先行运行了web模式的代理,可以看到端口是8080,这时候可以先把系统代理设置为127.0.0.1:8080 然后访问http://mitm.it/进行证书下载(顺序不要反了)
下载证书后直接打开进行受信任的根证书颁发机构安装
安装后大部分浏览器经过mitmproxy代理访问https就不会提示证书问题了,但是火狐浏览器需要在火狐自己的设置里面去配置信任证书才行,可自行百度下。
四、python代理脚本跑起来
如果只是为了看代理抓包的数据倒也不至于用mitm了,fiddler、charles就不错了,用它的主要原因还是可以通过python脚本来自动化处理一些请求或数据操作。我习惯于用多个addons来进行处理,这样的话可以实现像流水线一样不同python文件处理不同的请求,以下示例仅作参考,代理并运行脚本后打开www.baidu.com看效果:
#main.py import mitmproxy.http from mitmproxy import ctx, http import action1 class Counter: def __init__(self): self.num = 0 def request(self, flow): self.num = self.num + 1 ctx.log.error("这是第 %d 个请求" % self.num) addons = [ Counter(), action1.Action1() ]
#action1.py import mitmproxy.http from mitmproxy import ctx, http class Action1: def request(self, flow: mitmproxy.http.HTTPFlow): # 忽略非百度搜索地址 if flow.request.host == "www.baidu.com" : flow.request.url+="/s?wd=ip" ctx.log.error("发现baidu 修改url") return else: ctx.log.error("无需处理,"+flow.request.url)
运行脚本命令(-q是不显示本身的日志 -p手动指定端口):mitmdump -q -p 8080 -s main.py
五、mitmproxy的更多功能
上面的脚本只是个简单的示例,利用好响应的python脚本还可以实现更多强大的功能:
1、修改请求地址、修改请求url、修改请求头、请求体
2、修改响应结果、返回值
3、模拟接口/响应超时,模拟http响应码/错误码
4、对接口自动进行重新签名
5、封装一键切换正式环境/测试环境的功能,做APP测试的再也不用重新安装不同环境包了
6、根据接口文档可以实现高度定制的mock响应功能,不同入参响应不同结果
7、实现在手机上控制代理请求的处理(见之前文章:【概要篇】我是怎么实现全球任意地点控制局域网测试设备的http网络请求 – 染卷'blog (ranjuan.cn))
8、其他的一些自动化测试(太多的话就不建议用mitm了,可以用其他自动化框架来实现)
9、反向代理功能,利用host或url替换来实现请求的反向代理
10、接口信息存入数据库、网络爬虫、资源下载归档
11、构造网络响应,破解APP/客户端网络验证功能(比如绕过APP的强制更新弹窗)
基于互联网精神,在注明出处的前提下本站文章可自由转载!
本文链接:https://ranjuan.cn/mitmproxy-python-abc/
微信赞赏支付宝赞赏
发表评论