python mitmproxy抓包庫

2023-06-02 18:00:14

一.簡介

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