Mitmproxy的简单使用
mitmproxy
是一个功能强大的交互式中间人代理(MITM,Man-In-The-Middle Proxy),支持
HTTP、HTTPS 和 WebSocket,可以用于抓包、修改请求和响应。
基本用法
1. 启动 mitmproxy(默认监听 8080 端口)
1 | |
或者使用 Web UI:
1 | |
默认监听地址为 http://127.0.0.1:8080,Web UI 地址为
http://127.0.0.1:8081
2. 设置代理
在你要抓包的设备中,手动设置 HTTP/HTTPS 代理
3. 安装 mitmproxy 证书(用于 HTTPS 解密)
在浏览器中访问
http://mitm.it下载并安装相应平台的根证书,并进行安装
代理
很早就听说过mitmproxy了,但是因为不知道要手动设置系统代理,所以一直不知道该怎么用,毕竟其他抓包工具都是自动设置代理的。
Clash也需要系统代理?
方法1、Clash作为上游代理
指定 Clash 作为上游代理(127.0.0.1:7897):
1 | |
将系统代理设置为 127.0.0.1:8080
方法2、Clash启用TUN模式
TUN 模式:通过内核 TUN 虚拟网卡机制,将整个系统的所有流量(包括不遵守系统代理设置的应用)强制路由到 Clash 进行分流,而不依赖系统代理。
自动设置系统代理
自己手动设置代理还是太麻烦了,我们可以使用Python自动设置系统代理
1 | |
脚本
编写脚本,使用 mitmdump
执行,进行拦截、修改请求或响应
创建脚本
modify.py:1
2
3
4
5
6
7
8
9
10from mitmproxy import http
def request(flow: http.HTTPFlow):
if "api.example.com" in flow.request.pretty_url:
flow.request.headers["X-Debug"] = "true"
def response(flow: http.HTTPFlow):
if flow.response.content:
flow.response.text = flow.response.text.replace("original", "modified")启动
mitmdump加载脚本:1
mitmdump -s modify.py
嵌入
使用mitmdump似乎不是很方便,用着不习惯。更希望把mitmproxy
当作 Python 库在你自己的 Python 程序中调用,也就是将
mitmproxy 作为一个嵌入式代理服务(embedded
proxy)来运行。
以下是一份demo代码(含自动启用系统代理)
1 | |