Mitmproxy 是一个免费开源的交互式 HTTPS 代理。这是 mitmproxy 的快速参考备忘单。
| 选项 | 范例 | 描述 |
|---|---|---|
-p | mitmproxy -p 8001 | 在端口 8001 上启动代理 |
-m | mitmproxy -p 8001 -m reverse:http://127.0.0.1:4000 | 8001 端口反向代理到4000端口 |
-w | mitmproxy -p 8001 -w traffic.mitm | 流到达时流向文件 |
-r | mitmproxy -r traffic.mitm | 从文件中读取流 |
-C | mitmproxy -C traffic.mitm | 从保存的文件重放客户端请求 |
-S | mitmproxy -S traffic.mitm | 从保存的文件重放服务器响应 |
-s | mitmproxy -s myScript.py | 执行脚本 |
-h | mitmproxy -h | mitmproxy 快速帮助 |
命令语法:
:export.file format flow path
例子:
| 描述 | 命令示例 |
|---|---|
1. 导出到 /tmp/a.curl | :export.file curl @focus /tmp/a.curl |
2. 导出到 /tmp/a.httpie | :export.file httpie @focus /tmp/a.httpie |
3. 导出到 /tmp/a.raw | :export.file raw @focus /tmp/a.raw |
4. 导出到 /tmp/a.request | :export.file raw_request @focus /tmp/a.request |
5. 导出到 /tmp/a.response | :export.file raw_response @focus /tmp/a.response |
将流程导出到系统剪贴板
| :--- | --- |
|---|---|
-b ADDR, --bind-address ADDR | 将代理绑定到的地址(默认为所有接口) |
-I HOST, --ignore HOST | 忽略主机并转发所有流量而不对其进行处理。在透明模式下,建议使用 IP 地址(范围),而不是主机名。在常规模式下,仅忽略 SSL 流量并应使用主机名。提供的值被解释为正则表达式并匹配 ip 或主机名。可以多次通过 |
--tcp HOST | 与模式匹配的所有主机的通用 TCP SSL 代理模式。类似于 --ignore,但 SSL 连接被拦截。通信内容以详细模式打印到日志中 |
-n, --no-server | 不要启动代理服务器。用于离线分析以前捕获的流 |
-p PORT, --port PORT | 代理服务端口。默认值:8080 |
--http2, --no-http2 | 显式启用/禁用 HTTP/2 支持。默认情况下禁用,直到主要网站正确实施规范。默认值将在未来版本中更改 |
--no-websocket, --websocket | 显式启用/禁用 WebSocket 支持。默认启用 |
--raw-tcp, --no-raw-tcp | 显式启用/禁用实验性原始 TCP 支持。默认情况下禁用。默认值将在未来版本中更改 |
--spoof-source-address | 使用客户端的 IP 进行服务器端连接。与 –upstream-bind-address 结合使用以欺骗固定源地址 |
--upstream-bind-address UPSTREAM_BIND_ADDRESS | 将上游请求绑定到的地址(默认为无) |
| :--- | --- |
|---|---|
~a | 响应匹配资源:CSS、Javascript、Flash、图像。 |
~b regex | 主体 Body |
~bq regex | 请求正文 |
~bs regex | 响应体 |
~c int | HTTP 响应代码 |
~d regex | 域 |
~dst regex | 匹配目标地址 |
~e | 匹配错误 |
~h regex | 标头 |
~hq regex | 请求头 |
~hs regex | 响应头 |
~http | 匹配 HTTP 流 |
~m regex | 方法 |
~marked | 匹配标记流 |
~q | 匹配请求无响应 |
~s | 匹配响应 |
~src regex | 匹配源地址 |
~t regex | 内容类型标头 |
~tcp | 匹配 TCP 流 |
~tq regex | 请求 Content-Type 标头 |
~ts regex | 响应内容类型标头 |
~u regex | 网址 |
~websocket | 匹配 WebSocket 流(和 HTTP-WebSocket 握手流) |
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if flow.request.pretty_url == "http://example.com/path":
flow.response = http.HTTPResponse.make(
200, # (optional) status code
b"Hello World", # (optional) content
{"Content-Type": "text/html"} # (optional) headers
)
从代理发送回复而不向远程服务器发送任何数据