mitmproxy是一套工具,为HTTP/1、HTTP/2和WebSockets提供一个交互式的、支持SSL/TLS的拦截代理。mitmproxy使用Python开发。
介绍
特点:
- 拦截HTTP和HTTPS请求和响应,并即时修改它们
- 保存完整的HTTP对话,以便日后重放和分析
- 重放HTTP对话的客户端
- 重放以前记录的服务器的HTTP响应
- 反向代理模式,将流量转发至指定的服务器
- MacOS和Linux上的透明代理模式
- 使用Python对HTTP流量进行脚本化修改
- 即时生成用于拦截的SSL/TLS证书
工具:
mitmproxy
交互式的命令行界面
mitmweb
提供基于浏览器的图形用户界面
mitmdump
提供非交互式终端输出。类似与tcpdump
安装
Docker
# 仅启动服务端
$ docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy
$ docker run --rm -it [-v ~/.mitmproxy:/home/mitmproxy/.mitmproxy] -p 8080:8080 mitmproxy/mitmproxy
# 启动服务端和web ui
$ docker run --rm -it -d -p 8080:8080 -p 8081:8081 -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy mitmproxy/mitmproxy mitmweb --web-host 0.0.0.0
[10:42:24.925] HTTP(S) proxy listening at *:8080.
[10:42:24.927] Web server listening at http://0.0.0.0:8081/
[10:42:25.005] No web browser found. Please open a browser and point it to http://0.0.0.0:8081/
# 客户端
$ http_proxy=http://localhost:8080/ curl http://www.xiexianbin.cn
$ https_proxy=http://localhost:8080/ curl -k https://www.xiexianbin.cn
# dump
$ docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy mitmdump
$ docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy mitmdump --set ssl_insecure=true
$ ls ~/.mitmproxy
mitmproxy-ca-cert.cer mitmproxy-ca-cert.pem mitmproxy-ca.pem
mitmproxy-ca-cert.p12 mitmproxy-ca.p12 mitmproxy-dhparam.pem
# 查看 CA 证书
$ openssl x509 -noout -text -in ~/.mitmproxy/mitmproxy-ca-cert.cer
$ https_proxy=http://localhost:8080/ curl -k -i -v https://www.xiexianbin.cn
...
* ALPN, server accepted to use h2
* Server certificate:
* subject: CN=www.xiexianbin.cn
* issuer: CN=mitmproxy; O=mitmproxy
...