python代理charles_Mitmproxy + Python 做拦截代理
在測試過程中,我們經常用到Charles、Fiddler等抓包工具,通過抓取http請求進行相關的測試、問題排查。但是在一些特殊場景下,例如我們的數據傳輸是加密的,可能需要抓取到數據后再進行解密,這個使用抓包工具就不能完全符合我們的需求。
mitmproxy是什么
mitmproxy 就是用于 MITM 的 proxy,MITM 即中間人攻擊(Man-in-the-middle attack)。用于中間人攻擊的代理首先會向正常的代理一樣轉發請求,保障服務端與客戶端的通信,其次,會適時的查、記錄其截獲的數據,或篡改數據,引發服務端或客戶端特定的行為。
不同于 fiddler、Charles 或 wireshark 等抓包工具,mitmproxy 不僅可以截獲請求幫助開發者查看、分析,更可以通過自定義腳本進行二次開發。舉例來說,利用 fiddler 可以過濾出瀏覽器對某個特定 url 的請求,并查看、分析其數據,但實現不了高度定制化的需求,類似于:“截獲對瀏覽器對該 url 的請求,將返回內容置空,并將真實的返回內容存到某個數據庫,出現異常時發出郵件通知”。而對于 mitmproxy,這樣的需求可以通過載入自定義 python 腳本輕松實現。
但 mitmproxy 并不會真的對無辜的人發起中間人攻擊,由于 mitmproxy 工作在 HTTP 層,而當前 HTTPS 的普及讓客戶端擁有了檢測并規避中間人攻擊的能力,所以要讓 mitmproxy 能夠正常工作,必須要讓客戶端(APP 或瀏覽器)主動信任 mitmproxy 的 SSL 證書,或忽略證書異常。
mitmproxy簡單理解就是個抓包工具,它可以提供命令行界面、web界面,還可以通過python腳本實現自定義的請求攔截、篡改等自定義的操作。
mitmproxy模塊安裝
pip3 install mitmproxy
完成后,系統將擁有?mitmproxy、mitmdump、mitmweb?三個命令,由于?mitmproxy?命令不支持在 windows 系統中運行(這沒關系,不用擔心),我們可以拿?mitmdump?測試一下安裝是否成功,執行:
mitmdump --version
出現下面提示即安裝成功
Mitmproxy: 5.1.1
Python: 3.6.1
OpenSSL: OpenSSL 1.1.1g 21 Apr 2020
Platform: Darwin-16.7.0-x86_64-i386-64bit
mitmproxy啟動
要啟動 mitmproxy 用?mitmproxy、mitmdump、mitmweb?這三個命令中的任意一個即可,這三個命令功能一致,且都可以加載自定義腳本,唯一的區別是交互界面的不同。
啟動命令:
mitmdump -p 8889 -s run.py
-p 指定代理端口
-s 指定要執行的腳本文件
如果是啟動web界面,?可以在127.0.0.1:8081上看到
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+=1
if "api.pre.sanjieke.cn" in flow.request.url:
ctx.log.info("we have seen %d flow " % self.num)
def response(self, flow: mitmproxy.http.HTTPFlow):
if "api.pre.sanjieke.cn" in flow.request.url:
import json
data = json.loads(str(flow.response.content, encoding='utf-8'))
ctx.log.info("data = {}".format(data))
addons = [
Counter()
]
1. 定義一個規則類,可以通過設置http生命周期方法來自定義相關代理設置,例如counter類中的request和response,即在http請求中的請求和返回
2.將類加入到addons數組中,啟動mitmproxy時帶上該py文件即可
當然除了request和response還有其它的階段,這兩個是常用的。
mitmproxy除了可以定義處理http請求生命周期各個階段,還可以處理tcp鏈接生命周期、websocket生命周期等
基本常用的就是request、response這兩個。
腳本中可以通過ctx進行相關日志打印。
以上就是mitmproxy的簡單使用。
總結
以上是生活随笔為你收集整理的python代理charles_Mitmproxy + Python 做拦截代理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hbase shell 查看列名_hba
- 下一篇: 系统即将关机请保存关机是由nt_设置Wi