日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python代理charles_Mitmproxy + Python 做拦截代理

發布時間:2023/12/4 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 做拦截代理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。