Python3+mitmproxy安裝使用教程(Windows)

1、安裝

1.1 安裝mitmproxy

直接使用pip安裝便可python

pip install mitmproxy

pip本質上會一是安裝mitmproxy庫的相關代碼,二是安裝mitmproxy.exe/mitmdump.exe/mitmdump.exe三個可執行程序。windows

可執行程序被安裝在$PYTHON_HOME/Scripts文件夾下,若是是conda版本的python那能夠用如下命令來查看當前使用的是哪一個環境。安全

conda env list

 

1.2 安裝證書

和burpsuite相似mitmproxy默認只能攔截http,想要攔截https那就須要安裝證書。服務器

首先到$PYTHON_HOME/Scripts目錄下運行一下mitmdump,完成以後在用戶家目錄下的.mitmproxy文件夾下即會生成證書,傳到手機點擊安裝便可。cookie

mitmproxy-ca.p12----PKCS12格式證書私鑰網絡

mitmproxy-ca.pem----PEM格式證書私鑰app

mitmproxy-ca-cert.cer----PEM格式證書,與mitmproxy-ca-cert.pem相同只是改變了後輟,適用於部分Androidui

mitmproxy-ca-cert.p12----PKCS12格式證書,適用於Windowsurl

mitmproxy-ca-cert.pem----PEM格式證書,適用於大多數非Windows平臺spa

mitmproxy-dhparam.pem----PEM格式祕鑰文件,用於加強SSL安全性

Windows安裝證書:雙擊mitmproxy-ca-cert.p12----所有默認直接點「下一步」直到安裝完成。

 Android安裝證書:把mitmproxy-ca-cert.cer經過usb複製到手機上----點擊使用證書安裝器安裝證書(經過qq發送到手機上時提示沒法讀取證書不懂什麼緣由)

 

2、網絡代理配置

2.1 確保手機和電腦處於同一局域網

運行mitmproxy的電腦和運行目標app的手機要同處一個局域網才能進行代理。

若是是有筆記本那麼筆記本和手機同連到一個路由器上,或者在筆記本上開啓一個wifi而後用手機連上去,或者用Genymotion等模擬器運行app在模擬器設置代理,這三個方法均可以。

但若是是沒有無線網卡的臺式機那彷佛只能使用模擬器,要用其餘兩種方法那得外接一個usb式無線網卡。

 我這裏用的方法是臺式機外接無線網卡使用360開啓一個wifi手機連上去,臺式機ip爲172.30.195.1手機ip爲172.30.195.2。

 

2.2 電腦啓動代理

我這裏是windows,mitmproxy.exe並不支持windows,但這並無很大關係,mitmproxy.exe本質就是一個窗口式的burpsuite的proxy+repeater。

若是要攔包改包咱們用burpsuite更加好,用mitmproxy的意義在於代碼能獲取數據包,而這個功能是由mitmdump實現只要mitmdump.exe可運行便可。

和1.2同樣啓動mitmdump.exe

mitmdump.exe

 

2.3 手機配置代理

手機配置代理大同小異都在設置之中進行配置。好比我這裏的路徑是:

設置----無線和網絡WLAN----長按wifi名----修改網絡----顯示高級選項----代理----手動---服務器主機名輸入172.30.195.1(根據本身電腦ip修改)服務器端口輸入8080----保存

 

2.4 代理效果查看

完成後在啓動mitmdump.exe的代理窗口上便可看到手機發送的全部數據包。

 

3、Python3使用mitmproxy

咱們前邊2.2也提到使用mitmproxy的根本目的是想要python能修改發送的數據包,及截獲服務端返回的數據包。只是像2.4那樣打印出全部發送的請求對咱們的目的而言是沒有什麼用的。

python接觸發送數據包的途徑是在啓動mitmdump啓動時使用-s選項指定處理腳本,其中經過重寫request方法處理請求數據包,經過重寫response方法處理響應數據包。示例以下。

啓動命令:

mitmdump.exe -s example_script.py

exampl_script.py內容:

from mitmproxy import ctx

# 全部發出的請求數據包都會被這個方法所處理
# 所謂的處理,咱們這裏只是打印一下一些項;固然能夠修改這些項的值直接給這些項賦值便可
def request(flow):
    # 獲取請求對象
    request = flow.request
    # 實例化輸出類
    info = ctx.log.info
    # 打印請求的url
    info(request.url)
    # 打印請求方法
    info(request.method)
    # 打印host頭
    info(request.host)
    # 打印請求端口
    info(str(request.port))
    # 打印全部請求頭部
    info(str(request.headers))
    # 打印cookie頭
    info(str(request.cookies))

# 全部服務器響應的數據包都會被這個方法處理
# 所謂的處理,咱們這裏只是打印一下一些項
def response(flow):
    # 獲取響應對象
    response = flow.response
    # 實例化輸出類
    info = ctx.log.info
    # 打印響應碼
    info(str(response.status_code))
    # 打印全部頭部
    info(str(response.headers))
    # 打印cookie頭部
    info(str(response.cookies))
    # 打印響應報文內容
    info(str(response.text))

如圖箭頭所指處正是經request方法處理,依次輸出請求url、請求方法、host頭、請求端口、全部頭部及cookies

 

4、評述

咱們在電腦上寫爬蟲,關鍵操做是找到請求url、制定請求數據包、解析返回結果。

從這個角度出發對app咱們根本須要的彷佛其實只是攔截請求數據包和響應數據包、分析他們的格式,不必從app發出和接收數據包。

也就是彷佛用burpsuite代理並進行數據包分析就完了,mitmproxy沒什麼用(?)。

 

參考:

崔慶才----《Python3網絡爬蟲開發實戰》

相關文章
相關標籤/搜索