在介面測試中,會用到抓包工具或者代理工具,常用代理工具包括charles、 burpsuite、 fiddler、mitmproxy等,ssh -D引數
可實現socks5代理。網路嗅探工具可以使用tcpdump 和 wireshark。
Charles工具可以實現mock測試(參考 介面測試代理工具charles mock測試),如果要自動化實現這些功能,mitmproxy工具是個不錯的選擇。
本文主要內容包括簡要介紹mitmproxy代理工具、mitmproxy安裝、SSL 證照安裝以及實現和charles一樣的功能:rewrite和map local。
mitmproxy簡介
mitm(man-in-the-middle) 即中間人攻擊,mitmproxy是主要基於Python平臺開發的代理工具,功能強大,可滿足高度定製化需求。它是一個用於跟蹤流量的中間代理工具,具有截獲、篡改、重放等功能。
外掛是mitmproxy非常強大的一部分,提供了一系列API,mitmproxy擴充套件:https://docs.mitmproxy.org/stable/addons-overview/
外掛例子:https://docs.mitmproxy.org/stable/addons-examples/
mitmproxy支援5種代理模式:
- 正向代理(regular proxy)
- 反向代理(reverse proxy)
- 上行代理(upstream proxy)
- 透明代理(transparent proxy)
- socks5代理(socks Proxy)
本文主要介紹mitmproxy的正向代理使用過程
mitmproxy套裝包括3個工具:
- mitmproxy:命令列互動工具
- mitmdump:命令列非互動工具,提供類似 tcpdump的功能
- mitmweb:基於Web的使用者介面
mitmproxy的代理流程:
mitmproxy安裝
mitmproxy官網:https://mitmproxy.org/
mitmproxy安裝方法參考:https://docs.mitmproxy.org/stable/overview-installation/
macOS:
brew install mitmproxy
Linux和Windows:在官網mitmproxy.org下載安裝
檢查是否安裝成功
mitmdump --version
C:\Users\10287>mitmdump --version
Mitmproxy: 5.1.1 binary
Python: 3.7.6
OpenSSL: OpenSSL 1.1.1f 31 Mar 2020
Platform: Windows-10-10.0.18362-SP0
C:\Users\10287>
python包安裝:
注意python版本 >= 3.6
python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install mitmproxy
docker 安裝方法:
https://hub.docker.com/r/mitmproxy/mitmproxy/
docker pull mitmproxy/mitmproxy
SSL 證照安裝
和charles代理工具一樣,如果要抓取HTTPs報文,客戶端(APP 或瀏覽器)需要安裝SSL證照。
- 啟動服務
C:\Users\10287>mitmdump -p 8999
Proxy server listening at http://*:8999
-
瀏覽器設定代理
使用SwitchyOmega外掛新增mitmproxy代理,代理伺服器地址設定為主機IP地址,代理埠8999
SwitchyOmega外掛下載地址:https://github.com/FelisCatus/SwitchyOmega/releases
-
瀏覽器輸入 mitm.it
選擇對應系統的證照安裝
-
手機證照安裝方法同charles(地址為mitm.it)
參考 charles SSL證照安裝
手機瀏覽器訪問百度,命令列視窗顯示https報文解析成功
mitmproxy錄製回放
錄製回放參考:https://docs.mitmproxy.org/stable/tute-clientreplay/
- 開始錄製,儲存到檔案baidusearch中
D:\ProgramWorkspace\TestingDemo\test_mitmproxy>mitmdump -p 8999 -w baidusearch
- 手機瀏覽baidu,進行百度搜尋
- 停止錄製:
Ctrl+c
停止 - 回放
cmd命令列輸入如下命令:
mitmweb -p 8999
開啟生成的baidusearch文件,可以檢視報文互動過程
Rewrite
要求:和charles一樣,修改招商銀行名稱及股票價格。見介面測試代理工具charles mock測試
- 啟動 mitmproxy 服務
C:\Users\10287>mitmdump -p 8999
Proxy server listening at http://*:8999
-
手機(或者模擬器)安裝ssl證照,設定代理
見 charles SSL證照安裝 -
抓取雪球APP行情頁面資料包
C:\Users\10287>mitmweb -p 8999
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8999
開啟抓包後,重新整理雪球APP行情頁面,找到行情頁面報文,檢視URL特徵,用於下一步寫指令碼來找到它。
- 寫一個指令碼處理響應資料:
test_mitmproxy_response.py
#!/usr/bin/python3
#-*-coding:utf-8-*-
import json
def response(flow):
"""
1. 找到行情頁面相關URL
2. 修改第一條記錄(招商銀行)的名稱和股票價格
3. 將資料寫入響應資料中
"""
if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
data = json.loads(flow.response.content)
data['data']['items'][0]['quote']['name'] = data['data']['items'][0]['quote']['name'] + "test"
data['data']['items'][0]['quote']['current'] = '50'
flow.response.text = json.dumps(data)
- 執行指令碼
D:\ProgramWorkspace\TestingDemo\test_mitmproxy>mitmdump -p 8999 -s test_mitmproxy_response.py
- 重新整理雪球APP行情頁面
修改成功
Map Local
要求和介面測試代理工具charles mock測試一樣,我們直接使用資料倍增後的資料stock2.json,如果要實現自動化,可以使用python指令碼對響應資料進行處理。
股票資料可以在上一節Rewrite 第3步中直接儲存,或者通過charles獲取資料。
參考官方文件提供的mitmproxy外掛http-reply-from-proxy.py:https://docs.mitmproxy.org/stable/addons-examples/#http-reply-from-proxy ,
- 編寫響應資料處理指令碼test_request.py
#!/usr/bin/python3
#-*-coding:utf-8-*-
"""Send a reply from the proxy without sending any data to the remote server."""
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
with open("D:/ProgramWorkspace/TestingDemo/test_mitmproxy/stock2.json",encoding="utf-8") as f:
flow.response = http.HTTPResponse.make(
200, # (optional) status code
f.read(), # (optional) content
{"Content-Type": "application/json"} # (optional) headers
)
- 開啟服務,執行指令碼
D:\ProgramWorkspace\TestingDemo\test_mitmproxy>mitmdump -p 8999 -s test_request.py
Loading script test_request.py
Proxy server listening at http://*:8999
- 重新整理雪球APP行情頁面
修改成功
開啟服務後,可以直接修改stock2.json內容,不需要重新拉起。
文章標題:mitmproxy 代理工具介紹:rewrite和map local實現
本文作者:hiyo
本文連結:https://www.cnblogs.com/hiyong/p/14288354.html
歡迎關注公眾號:「測試開發小記」及時接收最新技術文章!