在 macOS 上安裝和配置 mitmproxy 是一個相對簡單的過程,可以使用常見的包管理工具如 Homebrew 或直接通過 Python 的包管理工具 pip。以下是詳細的安裝步驟:
方法一:使用 Homebrew 安裝
Homebrew 是 macOS 上流行的包管理工具。它可以快速安裝 mitmproxy。
安裝過程:
1、更新 Homebrew
運行以下命令以確保 Homebrew 是最新的:
brew update
2、安裝 mitmproxy
使用 Homebrew 安裝 mitmproxy:
brew install mitmproxy
3、驗證安裝
安裝完成后,可以通過以下命令驗證版本:
mitmproxy --version
4、輸出版本信息即表示安裝成功。
啟動 mitmproxy 或 mitmweb
啟動 mitmproxy:
mitmproxy --listen-host 0.0.0.0 --listen-port 8080
啟動 mitmweb(顯示 GUI):
mitmweb --listen-host 0.0.0.0 --listen-port 8080
方法二:使用 Python 的 pip 安裝
如果沒有使用 Homebrew,也可以通過 Python 的包管理工具 pip 安裝 mitmproxy,因為它是用 Python 編寫的。
安裝過程:
1、確保 macOS 上已安裝 Python 3
檢查 Python 版本,運行以下命令:
python3 --version
如果尚未安裝,可以通過 Homebrew 安裝:
brew install python
2、升級 pip
在安裝 mitmproxy 之前,建議確保 pip 已更新:
python3 -m pip install --upgrade pip
3、安裝 mitmproxy
使用 pip 安裝 mitmproxy:
python3 -m pip install mitmproxy
4、驗證安裝
檢查 mitmproxy 版本確認安裝是否成功:
mitmproxy --version
啟動 mitmproxy 或 mitmweb
啟動 mitmproxy:
mitmproxy --listen-host 0.0.0.0 --listen-port 8080
啟動 mitmweb(顯示 GUI):
mitmweb --listen-host 0.0.0.0 --listen-port 8080
配置 mitmproxy
配置代理
1、設置代理:
在 macOS 的系統設置中,進入 Wi-Fi > 網絡設置 > 高級選項 > 代理。
配置 HTTP/HTTPS 代理地址為 127.0.0.1:8080 或運行 mitmproxy 的本地 IP 和端口號。
2、配置證書信任(確保可以抓 HTTPS 流量)
mitmproxy 默認會攔截 HTTPS 流量,但需要用戶設備信任其自簽名證書。以下是設置證書信任的步驟:
1、安裝證書:
在設備瀏覽器中訪問 http://mitm.it,并按照提示下載 mitmproxy 的證書。
下載后會生成一個 *.pem 文件。
2、將證書導入 macOS 的鑰匙串中:
雙擊 .pem 文件,系統會自動導入到鑰匙串工具中。
在 鑰匙串訪問 中找到導入的證書。
右擊證書,選擇 信息,然后設置為 始終信任。
3、驗證證書是否生效:
再次運行 mitmproxy 或 mitmweb,進行流量捕獲測試。
常見問題和解決方法
- mitmproxy 未顯示流量
解決辦法:
確保代理端口設置正確,應用是否連接到 127.0.0.1:8080。
配置證書信任,確保 HTTPS 請求能夠被解密。 - Python 版本不兼容
如果系統自帶的 Python 版本較低(如 2.x),建議安裝最新版 Python:
brew install python
- GUI (mitmweb) 不顯示流量
流量過多時可能存在延遲,增加資源限制:
mitmweb --set connection_strategy=eager
檢查過濾器是否存在:
清空過濾器規則,顯示所有流量。
mitmproxy 提供了擴展 API,允許編寫 Python 腳本對流量進行操作,如捕獲、過濾和處理 HTTP 請求。
以下是一個 Python 腳本,能夠捕獲 HTTP 請求并存儲到集合中:
from mitmproxy import http
import json# 全局請求列表
http_requests = []
def read_json(file_path):"""讀取 JSON 文件數據"""try:with open(file_path, 'r', encoding='utf-8') as file:data = json.load(file) # 加載 JSON 數據為 Python 對象return dataexcept FileNotFoundError:print(f"{file_path} 不存在,將創建新文件。")return {} # 如果文件不存在,返回一個空字典except json.JSONDecodeError:print(f"無法解析 {file_path},請確保文件內容是合法的 JSON。")return {}def request(flow: http.HTTPFlow) -> None:"""每次捕獲 HTTP 請求時執行此回調函數"""global http_requests# 提取請求的基本信息url = flow.request.urlmethod = flow.request.methodheaders = dict(flow.request.headers)content = flow.request.text# 將請求信息存入集合request_data = {"url": url,"method": method,"headers": headers,"content": content,}http_requests.append(request_data)print(f"捕獲請求: {url}")def response(flow: http.HTTPFlow) -> None:"""每次捕獲 HTTP 響應時執行此回調函數"""global http_requestsurl = flow.request.urlprint(f"完成響應: {url}")def done():"""在 mitmproxy 運行結束時保存請求集合的數據"""global http_requests# 將捕獲的請求保存到文件with open("http_requests.json", "w", encoding="utf-8") as f:json.dump(http_requests, f, indent=4)print(f"捕獲了 {len(http_requests)} 個 HTTP 請求,已保存到 'http_requests.json'")
如何使用以上腳本
-
保存腳本文件
將上述代碼保存到文件中,例如 capture_requests.py。 -
啟動 mitmproxy 并加載腳本
通過 mitmproxy 或 mitmdump 加載腳本。例如:
mitmproxy -s capture_requests.py
或者使用 mitmdump(無界面模式):
mitmdump -s capture_requests.py
- 捕獲流量
確保目標設備正確配置代理到運行 mitmproxy 的機器,同時安裝并信任 CA 證書。完成流量操作后,腳本會自動將請求數據保存到 http_requests.json。