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
sudo dnf install -y python-pip python-devel libffi-devel openssl-devel libxml2-devel libxslt-devel libpng-devel libjpeg-devel
sudo pip install mitmproxy # or pip install --user mitmproxy

☆ 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
2
adb shell settings put global http_proxy 127.0.0.1:8888
adb reverse tcp:8888 tcp:8080

在 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
2
def response(flow):
flow.response.headers["newheader"] = "foo"

给http响应报文的头部添加一个 newheader 的字段。

☆ 6. socks 模式

mitmproxy -m socks5

作为 SOCKS5 proxy server 使用

☆ 7. 总结

这里说到的内容非常少,mitmproxy这个工具还是很强大的。

参考资料

https://www.usmacd.com/2021/09/01/Android_SSL_Pinning/


mitmproxy 简介
https://usmacd.com/cn/mitmproxy/
作者
henices
发布于
2020年3月19日
许可协议