是一個免費開源的交互式 HTTPS 代理。這是 mitmproxy 的快速參考備忘單。
選項 | 范例 | 描述 |
---|---|---|
-p | mitmproxy -p 8001 | 在端口 8001 上啟動代理 |
-m | mitmproxy -p 8001 -m reverse: | 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 快速幫助 |
k Ctrl b
▲ ▲▲
│ ││
h ? ─── + ─── ? l ││ page
│ ││
▼ ▼▼
j Ctrl f / Space
:--- | --- |
---|---|
h , j , k ,l | 左、下、上、右 |
Ctrl b | 向上翻頁 |
Space / Ctrl f | 向下翻頁 |
g / G | 轉到開頭/結尾 |
Arrows | 上下左右 |
$ brew install mitmproxy # macOS
Argument | Effect |
---|---|
-R REVERSE_PROXY , --reverse REVERSE_PROXY | 將所有請求轉發到上游 HTTP 服務器:http[s]://host[:port] 。客戶端始終可以通過 HTTPS 和 HTTP 進行連接,與服務器的連接由指定的方案決定 |
--socks | 設置 SOCKS5 代理模式 |
-T , --transparent | 設置透明代理模式 |
-U UPSTREAM_PROXY , --upstream UPSTREAM_PROXY | 將所有請求轉發到上游代理服務器://host[:port] |
:--- | --- |
---|---|
A | 恢復所有攔截的流 |
D | 重復流 |
F | 設置焦點跟隨 |
L | 從文件加載流 |
M | 切換查看標記流 |
S | 開始服務器回放 |
U | 取消設置所有標記 |
V | 還原對此流的更改 |
X | 殺死這個流 |
Z | 清除所有未顯示的流 |
a | 恢復此攔截流 |
b | 將響應主體保存到文件 |
d | 從視圖中刪除流 |
e | 將此流導出到文件 |
f | 設置視圖過濾器 |
m | 在此流程上切換標記 |
n | 創建新流程 |
o | 設置流列表順序 |
r | 重播此流程 |
v | 反向流列表順序 |
w | 將列出的流程保存到文件 |
| | 在此流上運行腳本 |
Ctrl l | 將剪輯發送到剪貼板 |
:--- | --- |
---|---|
q | 返回/退出 |
z | 清除流列表 |
: | 命令提示符 |
E | 查看事件日志 |
O | 查看選項 |
r | 重播此流程 |
Tab | 下一個 |
Enter | 選擇 |
:--- | --- |
---|---|
- | 循環到下一個布局 |
? | 查看幫助 |
B | 啟動附加的瀏覽器 |
C | 查看命令 |
I | 切換攔截 |
K | 查看按鍵綁定 |
P | 查看流程詳細信息 |
Q | 立即退出 |
W | 流式傳輸到文件 |
i | 設置攔截 |
Ctrl right | 聚焦下一個布局窗格 |
Shift tab | 聚焦下一個布局窗格 |
:--- | --- |
---|---|
-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 握手流) |
表達式
:--- | --- |
---|---|
@all | 所有流程 |
@focus | 目前關注的流程 |
@shown | 當前顯示的所有流程 |
@hidden | 當前隱藏的所有流程 |
@marked | 所有標記流 |
@unmarked | 所有未標記的流 |
mitmproxy 有一組方便的流選擇器,可以在當前視圖上操作
包含“google.com”的網址
google\.com
正文中包含字符串“test”的請求
~q ~b test
除了帶有 text/html 內容類型的請求之外的任何內容:
!(~q & ~t "text/html")
替換請求中的整個 GET 字符串(需要引號才能使其工作):
":~q ~m GET:.*:/replacement.html"
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if flow.request.pretty_url == "//example.com/path":
flow.response = http.HTTPResponse.make(
200, # (optional) status code
b"Hello World", # (optional) content
{"Content-Type": "text/html"} # (optional) headers
)
從代理發送回復而不向遠程服務器發送任何數據
class AddHeader:
def __init__(self):
self.num = 0
def response(self, flow):
self.num = self.num + 1
flow.response.headers["count"] = str(self.num)
addons = [
AddHeader()
]
為每個響應添加一個 HTTP 標頭