命令行访问
-
手册
https://docs.mitmproxy.org -
下载
https://mitmproxy.org/, 并解压缩 -
运行
mitmweb -
将浏览器的代理设置为 127.0.0.1:8080
我使用 firefox + ZeroOmega + auto switch (指定规则)
-
浏览器访问
http://127.0.0.1:8081 -
安装证书
file|Install Certificates...- 会访问
http://mitm.it/也要走 8080 代理 - 根据系统下载证书
- firefox 设置 | 隐私与安全 | 证书 | 查看证书| 导入
- 会访问
-
浏览器访问目标地址
-
Flow List 中过滤内容
- 直接输入根据 url 过滤
~bs xxx根据返回内容过滤~all xxx根据所有内容过滤- 过滤手册
https://docs.mitmproxy.org/stable/concepts/filters/
转发规则
mitmweb -s rewrite_target.py -p 8080
# 将 url 中指定规则的请求转发至其它服务器
# rewrite_target.py
from mitmproxy import http
TARGET_HOST = "tongyi.xsoft.com"
TARGET_PORT = 80
TARGET_SCHEME = "http"
def request(flow: http.HTTPFlow) -> None:
"""
将所有 path 以 /v1/chat/ 开头的请求,转发到 tongyi.xsoft.com(保持 path/query 不变)
例如:
请求 https://origin.example.com/v1/chat/abcd?x=1
转发到 https://tongyi.xsoft.com/v1/chat/abcd?x=1
"""
# 使用 path 匹配(更稳健,不受原始 host 影响)
try:
if flow.request.path.startswith("/v1/chat/") or flow.request.path == "/v1/chat":
# 修改上游目标
flow.request.scheme = TARGET_SCHEME
flow.request.host = TARGET_HOST
flow.request.port = TARGET_PORT
# 修改 Host header(后端通常需要这个)
flow.request.headers["Host"] = TARGET_HOST
except Exception:
# 避免脚本因为意外异常中断 mitmproxy
pass
透明代理
https://docs.mitmproxy.org/stable/howto/transparent/https://bitsflow.org/network/mitmproxy-as-transparent-proxy/https://zhuanlan.zhihu.com/p/265358836
使用 docker
podman run --rm -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy -p 8080:8080 -p 127.0.0.1:8081:8081 mitmproxy/mitmproxy mitmweb --web-host 0.0.0.0
- 8080 代理端口
- 8081 web 端口
- /home/mitmproxy/.mitmproxy 保存证书和日志,不设置的话,下次运行会重新生成证书
- 然后根据日志查看访问 url + 密码,或是使用 web_password 指定密码
- https://hub.docker.com/r/mitmproxy/mitmproxy