Windows 安裝mitmproxy 抓包基礎教程


mitmproxy是一個使用python編寫的中間人代理工具,跟Fiddle、Charles等等的抓包工具是差不多的,同樣可以用於攔截、修改、保存http/https請求。比起Fiddle、Charles,mitmproxy有一個最大的特點是支持python自定義腳本。
安裝mitmproxy工具的話直接到以下網址直接下載,一鍵安裝即可立即使用,也很簡單,移動端設置一下端口就直接可以抓包。

安裝完成后,系統會擁有3個命令mitmproxy、mitmdump、mitmweb,該三個命令的區別是交互界面不同而已。
mitmproxy是會直接提供一個命令行界面,可以實時看到請求的鏈接。
mitmdump是沒有界面,通過自定義腳本默默的按照自定義腳本工作。
mitmweb是通過web界面,實時看到請求的鏈接。
在命令行上直接輸入以上三個命令之一即可開始抓包
mitmproxy官網:https://mitmproxy.org
mitmproxy GitHub:https://github.com/mitmproxy/mitmproxy

以Windows安裝mitmproxy為例

一、抓包原理

與Fiddle,Charles一樣,mitmproxy運行於自己的PC上,mitmproxy會在PC的8080端口運行,然后開啟一個代理服務,這個服務實際上是一個HTTP/HTTPS的代理。
手機和PC在同一個局域網內,設置代理為mitmproxy的代理地址,這樣手機在訪問互聯網的時候流量數據包就會流經mitmproxy,mitmproxy再去轉發這些數據包到真實的服務器,服務器返回數據包時再由mitmproxy轉發回手機,這樣mitmproxy就相當於起了中間人的作用,抓取到所有Request和Response,另外這個過程還可以對接mitmdump,抓取到的Request和Response的具體內容都可以直接用Python來處理,比如得到Response之后我們可以直接進行解析,然后存入數據庫,這樣就完成了數據的解析和存儲過程。

二、Windows安裝mitmproxy

pip install mitmproxy

三、查看mitmproxy版本

啟動mitmproxy一共有三種命令方式
mitmproxy mitmdump mitmweb

mitmproxy

類似於vim編輯器,使用命令操作並查看每一個包的信息

mitmdump

mitmdump啟動的方式結合了mitmweb打印出的腳本信息和mitmproxy方式啟動的包信息,在命令行中查看可能會很難找目標信息,但不需要去進一步的去操作

mitmweb

會在本機上啟動一個web服務,以便在瀏覽器查看包信息,相比於命令行界面操作更加簡單,命令行則輸出腳本運行信息

Linux系統一般用命令行輸入mitmproxy mitmdump

mitmproxy --version

如果在Windows系統輸入 mitmproxy --version 報錯

Windows 命令一般用mitmdump 和 mitmweb

mitmdump --version

四、設置代理並安裝CA證書

手機或者雷電模擬器安裝證書
這里以安卓手機為例,安裝CA證書

Android機打開UC瀏覽器輸入或者自帶瀏覽器 IOS機同理
輸入mitm.it出現下圖選擇 Android 或者 Apple

開啟抓包:mitmdump 默認端口8080
mitmdump -p 8888

五、python腳本寫法

訪問請求

def request(flow):
  ctx.log.warn(str(flow.request.headers))
  print(flow.request.headers)  # 打印請求頭

響應請求

def response(flow):
  ctx.log.warn(str(flow.response.status_code)) # 獲取響應的狀態碼
  print(flow.response.text)  # 響應的文件

日志輸出

mitmdump提供了專門的日志輸出功能,可以設定不同級別以不同顏色輸出結果。我們把腳本修改成如下內容

from mitmproxy import ctx

def request(flow):
 flow.request.headers['User-Agent'] = 'MitmProxy'
 ctx.log.info(str(flow.request.headers))
 ctx.log.warn(str(flow.request.headers))
 ctx.log.error(str(flow.request.headers))

六、開始用python腳本抓包

python腳本可以隨便放哪,只要路徑正確就沒有問題
mitmdump -p 8888 -s D:/Yuan/mitmdata.py
抓包過程

七、mitmproxy腳本

   # -*- coding: utf-8 -*-

import mitmproxy.http

class Counter:
    def __init__(self):
        self.num = 0
	#設置上游代理
    def request(self, flow: mitmproxy.http.HTTPFlow):
         if flow.request.method == "CONNECT":
             return
         if flow.live:
             proxy = ('http://121.228.53.238', '9990')
             print(flow.request.host)
             flow.live.change_upstream_proxy_server(proxy)

    def response(self, flow: mitmproxy.http.HTTPFlow):
        # 攔截包的信息
        if 'https://mbd.baidu.com/newspage/data/landingpage' in flow.request.url:
            print(flow.response.text)
            self.num = self.num + 1
            ctx.log.info("We've seen %d flows" % self.num)

addons = [
    Counter()
]


免責聲明!

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



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