一.簡介
mitmproxy是一款用Python撰寫的支持HTTP(S)的中間人代理工具,它可以攔截、查看、修改、重放和保存HTTP/HTTPS流量 ,支持命令列界面和圖形界面,可用于安全測驗、網路除錯、API開發和反向工程等場景,mitmproxy具有很高的靈活性和擴展性,可以通過插件機制進行定制化開發和功能擴展,本文注意介紹命令列模式,
二.環境配置及啟動
1.安裝mitmproxy庫
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mitmproxy # pip install mitmproxy
2.安裝成功后查看版本
mitmdump --version
若提示報錯:ImportError: cannot import name 'soft_unicode' from 'markupsafe',大概意思是說markupsafe版本過低,但是通過pip show markupsafe查看后發現版本是2.1.2的,后來查看資料才發現這個版本的markupsafe不能用,沒辦法,只能卸載重新安裝2.0.1的了,
卸載:pip uninstall markupsafe
安裝:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn markupsafe==2.0.1
安裝的程序一定要加:--trusted-host pypi.tuna.tsinghua.edu.cn(下載的鏡像),大概意思就是信任該下載地址,完了之后再次輸入mitmdump --version就可以了,

3.啟動mitmproxy
mitmproxy啟動命令有三種,分別是mitmproxy,mitmweb,mitmdump,由于win不支持mitmproxy,所以本次只介紹后兩者的用法,
1)mitmdump
mitmdump是在終端列印抓包資訊,我們在終端直接輸入mitmdump就可以啟動了,

下面是mitmdump的一些引數,有興趣的可以研究看看,
-h,--help:顯示幫助資訊
-v,--version:顯示版本資訊
-q,--quiet:靜默模式,只輸出警告和錯誤資訊
-s,--scripts:指定JavaScript腳本檔案路徑
-r,--readfile:從檔案中讀取流量
-w,--writefile:將流量寫入檔案
-p,--listen-port:指定監聽埠
-P,--http-proxy:指定HTTP代理地址
-U,--upstream-proxy:指定上游代理地址
--ssl-insecure:禁用SSL驗證
--anticomp:禁用自動解壓縮
--no-http2:禁用HTTP/2協議
--no-websocket:禁用WebSocket協議
--no-anticache:禁用自動快取
--no-server-replay:禁用服務器回放模式
--set:設定mitmproxy配置項,格式為key=value
--showhost:顯示主機名
2)mitmweb
mitmweb是將抓包資訊顯示在web頁,在終端輸入mitmweb后會自動打開瀏覽器進行抓包,也可以在瀏覽器中直接輸入地址:http://127.0.0.1:8081/#/flows


mitmweb常用引數,
-h,--help:顯示幫助資訊;
-b,--listen-host:指定mitmweb監聽的IP地址;
-p,--listen-port:指定mitmweb監聽的埠號;
--web-host:指定mitmweb UI的IP地址;
--web-port:指定mitmweb UI的埠號;
-s,--scripts:指定mitmweb運行的腳本檔案;
--anticache:啟用anti-caching;
--anticomp:啟用anti-compression;
--anticomp-decoding:啟用anti-compression解碼;
--client-certs:指定客戶端證書檔案路徑;
--no-web-open-browser:啟動mitmweb時不自動打開瀏覽器;
--no-web-socket:禁用WebSocket協議;
--no-http2:禁用HTTP/2協議;
--no-web:禁用mitmweb UI,
三.抓包配置
1.web
1)在終端啟動mitmproxy后,我們打開電腦本地代理(win鍵>更改代理設定>開啟使用代理服務器),埠要與啟動mitmproxy一致8080,

啟動完本地服務器代理后其實我們就可以看見抓包資訊了,不過全是報錯資訊,因為瀏覽器還沒有安裝證書,

2)在瀏覽器輸入:http://mitm.it/ 下載win證書

下載完成后直接安裝即可,直接傻瓜式安裝,需要注意的是將證書安裝到下圖存盤中

3)安裝完證書后發現還是沒法抓包,瀏覽器會提示不是私密連接,這個時候我們打開dos視窗,輸入以下內容,
"C:\Program Files (x86)\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
輸入完點擊回車后會自動打開瀏覽器,此時不必理睬就行,在終端執行ctrl+c鍵關閉mitmproxy服務后重新開啟,便可以正常抓包了,
2.Android
1)終端啟動mitmproxy服務
2)dos視窗輸入ipconfig/all,查看本地IPv4代理,

3)手機與電腦連接同一個局域網,開啟手動代理后輸入以上ip,埠為8080,
4)打開手機瀏覽器輸入:http://mitm.it/ 下載安裝Android證書,完了之后就可以正常抓包了
3.ios
與Android步驟一致,多了步證書信任,可參考:https://www.cnblogs.com/lihongtaoya/p/15196393.html
四.python代碼實作
不做多余解釋了直接貼代碼
from mitmproxy import http def request(flow: http.HTTPFlow): request_list = flow.request # 獲取請求物件 print(request_list.method, request_list.host) def response(flow: http.HTTPFlow): responses_list = flow.response # 獲取回應物件 print(responses_list.text, responses_list.status_code)
在獲取到請求和回應物件后,用物件名可直接呼叫自己需要的屬性

撰寫完python代碼后再終端啟動mitmproxy并指定腳本檔案,就可以看見列印的介面資訊了
mitmweb -s ./lianxi/mitmproxy.py

五.請求和回應如何做到一對一關系
我們在用python代碼列印請求和回應的時候是錯亂的,根本不知道該請求對應的回應是哪個,這個時候可以使用請求和回應對應的唯一id來判斷,id的生成內部封裝原來使用了uuid來生成的,我們這邊就直接看代碼了,
from mitmproxy import http def request(flow: http.HTTPFlow): print("request.flow.id:", flow.id) request_list = flow.request # 獲取請求物件 print(request_list.url) def response(flow: http.HTTPFlow): print("response.flow.id:", flow.id) # 每個請求和回應的flow.id是對應的,同樣也是唯一的 responses_list = flow.response # 獲取回應物件 print(responses_list.status_code)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/554155.html
標籤:其他
上一篇:Python單元測驗:一步步了解測驗框架、測驗用例和覆寫率分析
下一篇:返回列表
