## 什么是 [mitmproxy](https://github.com/mitmproxy/mitmproxy) ?
[mitmproxy](https://github.com/mitmproxy/mitmproxy) 是一款免费开源的 HTTPS 代理工具,类似于 fiddler ,charles 等抓包工具,但是有以下几个特点 :
- mitmproxy 是用 Python 写的,可以进行二次开发,实现高度定制化的需求
- mitmproxy 支持拦截、修改、保存 HTTP/HTTPS 请求和响应,并提供了交互式的命令行界面和网页端界面
- mitmproxy 还提供了 Python API,可以通过关联脚本对请求和响应进行自定义过滤和修改
- mitmproxy 支持 HTTP/1,HTTP/2 和 WebSockets 协议,并具有 SSL/TLS 功能
## 如何安装和使用 mitmproxy ?
mitmproxy 的安装和使用非常简单,只需要以下几个步骤 :
- 安装 Python 环境(推荐 Python 3.6+)
- 使用 pip 命令安装 mitmproxy:`pip install mitmproxy`
- 启动 mitmproxy:`mitmdump` 或 `mitmweb`
- 配置代理:在需要抓包的设备上设置代理为本机 IP 和端口(默认为 8080)
- 安装证书:在浏览器或设备上访问 `http://mitm.it` 并下载对应的证书并安装
- 开始抓包:在浏览器或设备上访问任意网站或 APP,就可以在命令行或网页端看到请求和响应的详细信息
## 如何利用 mitmproxy 的强大功能?
mitmproxy 的最大优势是它可以通过 Python 脚本对请求和响应进行灵活的处理,例如:
- 修改请求或响应的头部、内容、状态码等
- 过滤或标记特定的请求或响应
- 模拟网络延迟或错误
- 保存或重放请求或响应
- 实现自动化测试或爬虫等
要使用脚本功能,只需要编写一个 Python 文件,并在启动 mitmproxy 时指定该文件即可。例如:
```python
# myscript.py
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
# 修改所有 GET 请求为 POST 请求,并添加一个参数 foo=bar
if flow.request.method == "GET":
flow.request.method = "POST"
flow.request.content = b"foo=bar"
def response(flow: http.HTTPFlow) -> None:
# 修改所有状态码为 200 的响应为 404,并添加一个头部 X-Mitm: True
if flow.response.status_code == 200:
flow.response.status_code = 404
flow.response.headers["X-Mitm"] = "True"
```
然后启动 mitmdump 或者 mitweb 并指定该脚本:
```bash
mitmdump -s myscript.py # 或者 mitweb -s myscript.py
```
这样就可以实现对请求和响应的自定义修改了。
## 总结
mitmporxy 是一款非常强大且易用的 HTTPS 代理工具,它不仅可以实现基本的抓包功能,还可以通过 Python 脚本进行高度定制化的处理。如果你想要更深入地了解和使用它,请参考官方文档。
[1] @halomaster • 09 Mar 2023, 11:48 GMT
文档:https://docs.mitmproxy.org/stable/
1 of 1 pages 1 replies