##################################
mitmproxy
參考文檔:
https://www.cnblogs.com/grandlulu/p/9525417.html
簡介:
pip3 install mitmproxy
mitmdump --version
mitmproxy、mitmdump、mitmweb
mitmdump -s addons.py
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
"G:\Program Files\Mozilla Firefox\firefox.exe" --proxy-server=127.0.0.1:8081 --ignore-certificate-errors
事件:***http生命周期
addons文件
---------------------------------------
mitmproxy功能:
正向代理,截獲請求
安裝:
pip3 install mitmproxy
# 查看是否安裝成功
mitmdump --version
運行:
# mitmproxy 命令不支持在 windows 系統中運行
mitmproxy、mitmdump、mitmweb
mitmproxy 提供一個實時命令行界面
mitmweb 命令啟動后,會提供一個 web 界面
mitmdump 命令啟動后,沒有界面,程序默默運行,結合自定義腳本(實際生產中基本使用這個)
mitmweb 啟動 mitmproxy
mitmproxy 綁定了 *:8080 作為代理端口,並提供了一個 web 交互界面在 127.0.0.1:8081。
使用 Edge 或其他瀏覽器打開 127.0.0.1:8081
關閉所有 Chrome 窗口
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
"G:\Program Files\Mozilla Firefox\firefox.exe" --proxy-server=127.0.0.1:8081 --ignore-certificate-errors
用 Chrome 打開一個網站(模擬client行為)
Edge上查看(查看proxy攔截的請求)
腳本:
編寫一個 py 文件供 mitmproxy 加載
1.文件中定義了若干函數,這些函數實現了某些 mitmproxy 提供的事件,mitmproxy 會在某個事件發生時調用對應的函數
import mitmproxy.http
from mitmproxy import ctx
num = 0
def request(flow: mitmproxy.http.HTTPFlow):
global num
num = num + 1
ctx.log.info("We've seen %d flows" % num)
2.文件定義了變量 addons,addons 是個數組,每個元素是一個類實例,
這些類有若干方法,這些方法實現了某些 mitmproxy 提供的事件,mitmproxy 會在某個事件發生時調用對應的方法
import mitmproxy.http
from mitmproxy import ctx
class Counter:
def __init__(self):
self.num = 0
def request(self, flow: mitmproxy.http.HTTPFlow):
self.num = self.num + 1
ctx.log.info("We've seen %d flows" % self.num)
addons = [
Counter()
]
事件:
1. 針對 HTTP 生命周期
# 收到了來自客戶端的 HTTP CONNECT 請求,僅是 client 與 proxy 的之間的交流
def http_connect(self, flow: mitmproxy.http.HTTPFlow):
# 來自客戶端的 HTTP 請求的頭部被成功讀取。此時 flow 中的 request 的 body 是空的。
def requestheaders(self, flow: mitmproxy.http.HTTPFlow):
# 來自客戶端的 HTTP 請求被成功完整讀取。
def request(self, flow: mitmproxy.http.HTTPFlow):
# 來自服務端的 HTTP 響應的頭部被成功讀取。此時 flow 中的 response 的 body 是空的。
def responseheaders(self, flow: mitmproxy.http.HTTPFlow):
# 來自服務端端的 HTTP 響應被成功完整讀取。
def response(self, flow: mitmproxy.http.HTTPFlow):
# 發生了一個 HTTP 錯誤。比如無效的服務端響應、連接斷開等。注意與“有效的 HTTP 錯誤返回”不是一回事,后者是一個正確的服務端響應,只是 HTTP code 表示錯誤而已。
def error(self, flow: mitmproxy.http.HTTPFlow):
2. 針對 TCP 生命周期
3. 針對 Websocket 生命周期
4. 針對網絡連接生命周期
5. 通用生命周期
啟動:
mitmdump -s addons.py
##################################