mitmproxy 简介
本文最后更新于 2023年8月29日 凌晨
主要特色:Intercept HTTP & HTTPS requests and responses and modify them on the fly
使用python编写,可以在windows,Linux, Mac 下运行,这点比 fiddler 有优势。可以修改报文内容,这点很不错。
☆ 1. 安装
参考 https://docs.mitmproxy.org/stable/overview-installation/
1 |
|
☆ 2. 基本使用
mitmproxy --listen-host 127.0.0.1 -p 8080
--listen-host
address to bind address- -p bind port
- -s “script.py –bar”, –script “script.py –bar” Run a script. Surround with quotes to pass script
2.1 mitmproxy 界面操作
- ? 显示帮助信息
- h, j, k, l 上下左右,同 vi
- enter 进入具体报文
- q 退出界面
- tab 详细报文内容页面
- E 导出报文内容
☆ 3. 导入mitmproxy的 CA
使用mitmproxy 最大的原因就是因为它可以对付https报文。
参考 https://docs.mitmproxy.org/stable/concepts-certificates/
mitmproxy 的 CA 证书放在 ~/.mitmproxy 目录, 可以在不同设备中添加。
3.1 目标设备为Linux
导入证书
- Google Chrome
设置 -> HTTPS/SSL -> 证书管理 -> 授权中心
- Firefox
没用Firefox,估计也类似。
设置代理
设置好CA后,设置浏览器使用mitmproxy代理即可,可以考虑使用浏览器代理插件。
3.2 目标设备为 Android
导入证书
adb push ~/.mitmproxy/mitmproxy-ca-cert.cer /sdcard/Download
设置 -> 安全 -> 证书存储 -> 从手机存储安装, 选择上传的CA证书。
设置代理
emulator 上可以通过下面的命令行,设置代理。
./emulator -avd 7.0_x86 -http-proxy http://127.0.0.1:8080
真实的设备上,可以通过设置 wifi 代理,或者使用下面的命令行。
1 |
|
在 Android 上设置 http 全局代理 127.0.0.1:8888, 最后将 Android 的 8888 端口转发到本机 8080 端口。
☆ 4. 透明模式
mitmproxy 支持透明部署,具体的方法可以参考下面的文章。
https://docs.mitmproxy.org/stable/howto-transparent/
☆ 5. 修改报文内容
github 上有很多例子,这次没有需求,可以参考
https://github.com/mitmproxy/mitmproxy/tree/main/examples/addons
https://github.com/mitmproxy/mitmproxy/tree/main/examples/contrib
官方文档上给了个简单例子
1 |
|
给http响应报文的头部添加一个 newheader 的字段。
☆ 6. socks 模式
mitmproxy -m socks5
作为 SOCKS5 proxy server 使用
☆ 7. 总结
这里说到的内容非常少,mitmproxy这个工具还是很强大的。