介绍
日常测试客户端需求,经常会使用Fiddler、Charles工具,抓取网络请求内容。Fiddler、Charles也有使用上的不足,比如Fiddler仅支持winsows、Charles是收费的,另外Fiddler、Charles在扩展开发脚本上都比较薄弱。
今天就来介绍兼容性强、扩展性强并且免费的代理工具mitmproxy。mitmproxy是一款免费、开放的基于Python开发的交互式HTTPS代理工具。
工作原理如下:
特性:
- 1、支持Web
- 2、支持终端
- 3、支持Python脚本
- 4、可以记录和重放
官方文档:
https://docs.mitmproxy.org/stable/
githu地址:
https://github.com/mitmproxy/mitmproxy.git
mitmproxy与Fiddler、Charles对比
安装
在mac环境下安装命令如下:
代码语言:javascript复制pip3 install mitmproxy
brew install mitmproxy
mitmproxy提供了三个命令,启动模式不同:
- mitmproxy: 提供一个命令行界面。
- mitmweb:提供一个浏览器界面。
- mitmdump: 提供一个简单的终端输出。
运行命令
mitmproxy
命令行终端执行mitmproxy命令,会出现一个命令行页面,展示请求列表:请求、响应、详情三个部分,可以通过上下键切换tab。
mitmweb
命令行终端执行mitmweb命令,会自动打开浏览器,http://127.0.0.1:8081,手机或者PC连接代理地址:http://*:8080。
mitmweb页面和Charles的页面基本上功能差不多,可以进行查看数据包请求、请求重试、过滤等。
mitmdump
mitmdump是mitmprxoy的命令行接口,可以实时监控请求,可以对接Python对请求进行处理,有了它我们可以不用手动截获和分析HTTP请求和响应,只需要写好请求和响应的处理逻辑即可。
另外mitmdump可以实现数据的解析、存储等工作,这些过程都可以通过Python实现。
先准备一个py文件如scripts.py,修改请求和响应。
修改请求
修改请求头的agent字段值是MitmProxy。
代码语言:javascript复制from mitmproxy import flow
def request(flow):
flow.request.headers["agent"] = "MitmProxy"
print(flow.request.headers["agent"])
修改响应
修改响应结果的状态码为418。
代码语言:javascript复制from mitmproxy import http
def request(flow: http.HTTPFlow):
if flow.request.path.endswith("/brew"):
flow.response = http.HTTPResponse.make(
418, b"I'm a teapot",
)
编写完成脚本后,执行命令: mitmdump -s script.py
结语
本文介绍了mitmproxy代理工具的简单介绍,后续会介绍mitmproxy的高阶功能和在工作中的一些实践。