mitmproxy 使用筆記


零、背景


我之前寫過關於 charles 的使用筆記,為什么現在又要來寫同類型的 mitmproxy 工具呢?下面我會娓娓道來他比 charles 多出的強大功能。

一、介紹


mitmproxy 是一個支持 HTTP 和 HTTPS 的抓包程序, 類似 Fiddle、Charles , 只不過它通過 CMD 的形式操作。

mitmproxy 還有兩個關聯組件:

一個是 mitmdump ,它是 mitmproxy 的命令行接口,利用它可以對接 Python 腳本,實現監聽后的處理;

另一個是 mitmweb ,它是一個Web 程序,通過它以清楚地觀察到 mitmproxy 捕獲的請求。(跟 charles 差不多)

二、安裝與配置


1、安裝

(1)方法一:通過 pip 安裝

pip3 install mitmproxy

會自動附帶安裝 mitmdump 和mitmweb。

(2)方法二:通過 brew 安裝

brew install mitmproxy

2、配置

抓 HTTPS 需要配置 CA 證書

(1) 電腦端(以 mac 為例)

運行起 mitmdump命令。

然后找到 ~/.mitmproxy/mitmprox-ca-cert.pem 文件,雙擊,彈出 Keychain Access窗口,找到名為 mitmproxy 的 CA 證書,選擇 Always Trust。

(2) 手機端(以 Android 為例)

同樣將 ~/.mitmproxy/mitmprox-ca-cert.pem 文件發送給手機,在手機端打開后,填入證書名和點擊確認按鈕,如下圖:

三、使用


下面的例子都以爬手機端為例,記得讓手機和 PC 處於同一個局域網。

1、mitmproxy

1、命令行運行 mitmproxy命令,會啟動一個代理,默認監聽 8080 端口。

2、手機設置里修改網絡的代理設置:

3、現在就可以在命令行里查看經過的網絡請求了

4、也可查看請求的具體詳情:

5、還有編輯、重發功能

2、mitmweb

可以理解成界面版的 mitmproxy。

略。

3、mitmdump

上面介紹的功能其實 Fiddle、 Charles 也有,那么mitmproxy 的優勢何在哪?

這就要提到 mitmdump 了,有了它我們可以直接對接 Python 腳本對請求進行處理。比如對數據的解析、存儲、修改等。

示例 demo:


from mitmproxy import ctx

def request(flow):
    # 獲取
    request = flow.request
    # 修改
    request.headers['User-Agent'] = 'MitmProxy'

    # 日志輸出
    print(request.host)
    ctx.log.info(request.host)  # 顏色同上
    ctx.log.warn(request.host)  # 顏色:黃
    ctx.log.error(request.host)  # 顏色:紅


def response(flow):
    response = flow.response
    ctx.log.info(str(response.status_code))

詳細文檔:https://mitmproxy.readthedocs.io/en/v2.0.2/mitmdump.html

4、拓展 —— httpbin.org

通過 mitmdump 對 request 做了修改,想要看修改后達成的效果,推薦客戶端去訪問這個網址:http://httpbin.org/get 即可知曉。

四、坑


1、爬的成功率不高,失敗的會報錯 :Cannot establish TLS with client……

會是 https 抓不到的問題?但我的電腦和手機端的 CA 證書都裝了呀,費解。

解決方案:待解決


參考資料

《python 3 網絡爬蟲開發實踐》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM