MitmProxy使用:mitmproxy、mitmweb、mitmdump
介绍
mitmproxy是Python编写的一款功能完善的代理工具,mitmproxy是一款支持拦截HTTP和HTTPS请求和响应并即时修改它们的交互式中间人代理工具。同时它提供了Python API给开发者编写插件用来自定义对流量进行处理和修改。
为什么选择 mitmproxy
- 相对于我们常用的 fiddle 代理工具,它是可以跨平台;
- 相对于跨平台的 charles 代理工具,它是开源免费的;
- 最重要的一点,也是为什么我们采用 mitmproxy 来进行做 Mock,它支持使用 Python 进行二次开发,这样就可以结合业务进行灵活拓展了。
mitmproxy 构成
- mitmproxy:是一个控制台工具,允许交互式检查和修改 HTTP 流量;
- mitmweb:mitmproxy 是基于 Web 的用户界面,它允许交互式检查和修改 HTTP 流量;
- mitmdump:mitmproxy 的命令行版本。它提供了类似 tcpdump 的功能,可查看、记录和以编程方式转换 HTTP 流量。
安装
pip3 install mitmproxy
启动
mitmproxy #或者指定端口 mitmproxy -p 8888
启动 mitmproxy 之后,默认开启8080端口, mitmproxy 命令不支持Windows平台,需要使用 mitmdump 或者 mitmweb 命令代替。Windows系统也可以在官网下载它的EXE文件进行安装。
快速部署
设置本地代理
export http_proxy="127.0.0.1:8080"
拉取mitmproxy镜像
docker pull mitmproxy/mitmproxy
运行镜像
docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy mitmproxy
mitmproxy 控制台
快速测试
curl http://readtest.cn/
访问结果:
注意:现在访问https无法劫持,需要访问http://mitm.it 来安装证书,选择匹配的平台,下载 HTTPS 证书。并按照对应的步骤进行安装
mitmproxy 快捷键
? 帮助文档 q 返回/退出程序 b 保存response body f 进入编辑模式,可在最下面输入过滤条件,ESC
或Enter
退出编辑
!(~c 200)
#显示所有返回不是200的请求!(~c 200) & ~d safecode
#显示域名包含safecode,返回不是200的请求~m post & ~u safe
#显示请求的链接里面包含safe的post请
k 上
j 下
h 左
l 右
space 翻页
enter 进入接口详情
z 清屏
e 编辑
r 重新请求
mitmweb
$ mitmweb
启动 mitmweb 命令后,会有一个类似Chrome开发者工具的Web页面,功能上类似mitmroxy,一样可以查看每个请求的详情,包括请求、响应,还可以对请求和响应内容进行修改,包括过滤、重新发送请求等常用功能。
mitmdump
$ mitmdump -s script.py
mitmdump 命令最大的特点就是可以自定义脚本,你可以在脚本中对请求或者响应内容通过编程的方式来控制,实现数据的解析、修改、存储等工作
# script.py
from mitmproxy import http def request(flow: http.HTTPFlow) -> None: # 将请求新增了一个查询参数 flow.request.query["mitmproxy"] = "rocks" def response(flow: http.HTTPFlow) -> None: # 将响应头中新增了一个自定义头字段 flow.response.headers["newheader"] = "foo" print(flow.response.text)
官网: https://mitmproxy.org
文档:http://docs.mitmproxy.org/en/v0.18.2/introduction.html