最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python+mitmproxy抓包的實(shí)現(xiàn)

 更新時(shí)間:2025年04月29日 09:39:47   作者:funcdefmain  
mitmproxy是基于Python的第三方庫(kù),配合Python腳本可以篡改請(qǐng)求和響應(yīng)數(shù)據(jù),使用起來(lái)相對(duì)簡(jiǎn)單,下面就來(lái)介紹一下python+mitmproxy抓包的實(shí)現(xiàn),感興趣的可以了解一下

什么是mitmproxy

Mitmproxy 就是用于 MITM 的 Proxy,MITM 即中間人攻擊(Man-in-the-middle attack)。不同于 fiddler ,charles或 wireshark 等抓包工具,mitmproxy 不僅可以抓取請(qǐng)求響應(yīng)幫助開(kāi)發(fā)者查看、分析,更可以通過(guò)自定義python腳本進(jìn)行二次開(kāi)發(fā)。

安裝

pip安裝

pip install mitmproxy
# 驗(yàn)證
mitmproxy --version

安裝證書

打開(kāi)系統(tǒng)代理,將系統(tǒng)代理設(shè)置為127.0.0.1:8080(mitmproxy默認(rèn)代理)或192.168.xxx.xxx:8080(本機(jī)ip,用于局域網(wǎng))

cmd輸入mitmproxy, 瀏覽器訪問(wèn) http://mitm.it/,下載證書安裝。

代碼安裝(自動(dòng)化)

設(shè)置系統(tǒng)代理(win)

import ctypes
import winreg


def set_proxy(enable_proxy, proxy_address="http://127.0.0.1:8080"):
    try:
        # 代理服務(wù)器地址和端口
        proxy_server = proxy_address

        # 打開(kāi)注冊(cè)表鍵
        key_path = r"Software\Microsoft\Windows\CurrentVersion\Internet Settings"
        key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path, 0, winreg.KEY_SET_VALUE)

        # 設(shè)置代理服務(wù)器
        if enable_proxy:
            winreg.SetValueEx(key, "ProxyServer", 0, winreg.REG_SZ, proxy_server)
            winreg.SetValueEx(key, "ProxyEnable", 0, winreg.REG_DWORD, 1)
        else:
            # 關(guān)閉代理
            winreg.SetValueEx(key, "ProxyEnable", 0, winreg.REG_DWORD, 0)

        # 刷新代理設(shè)置
        INTERNET_OPTION_REFRESH = 37
        INTERNET_OPTION_SETTINGS_CHANGED = 39
        internet_set_option = ctypes.windll.Wininet.InternetSetOptionW
        internet_set_option(0, INTERNET_OPTION_REFRESH, 0, 0)
        internet_set_option(0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)

        # 關(guān)閉注冊(cè)表鍵
        winreg.CloseKey(key)
        print("系統(tǒng)代理設(shè)置成功!")
    except Exception as e:
        print(f"設(shè)置系統(tǒng)代理失敗: {e}")


if __name__ == "__main__":
    # 設(shè)置代理(啟用代理)
    set_proxy(enable_proxy=True, proxy_address="http://127.0.0.1:8080")
    # 設(shè)置代理(關(guān)閉代理)
    # set_proxy(enable_proxy=False)

安裝證書(certutil.exe -addstore root mitmproxy-ca-cert.cer)

import subprocess
import platform


def is_mitmproxy_cert_installed():
    try:
        # 使用 PowerShell 檢查證書是否存在
        res = subprocess.check_output(['powershell',
                                       'Get-ChildItem -Path Cert:\CurrentUser\Root | Where-Object {$_.Subject -like "*mitmproxy*"}'])
        if res:
            return True
        return False
    except subprocess.CalledProcessError as e:
        return False


def install_mitmproxy_certificate(cert_path):
    system_platform = platform.system()
    if system_platform == "Windows":
        # Windows系統(tǒng)下使用certutil命令
        try:
            res = subprocess.run(["certutil.exe", "-addstore", "root", cert_path], check=True, capture_output=True,
                                 text=True)
            print(res)
            print("Mitmproxy證書已成功安裝到根證書存儲(chǔ)中。")
        except subprocess.CalledProcessError as e:
            print(f"安裝Mitmproxy證書失敗: {e}")


if __name__ == "__main__":
    if is_mitmproxy_cert_installed():
        print("Mitmproxy證書已安裝")
    else:
        print("Mitmproxy證書未安裝")
        # 替換為實(shí)際的證書路徑
        certificate_path = r"mitmproxy-ca-cert.cer"
        install_mitmproxy_certificate(certificate_path)

# "certmgr.msc"

運(yùn)行

可以用 mitmproxy、mitmdump、mitmweb 這三個(gè)命令中的任意一個(gè)

  • mitmproxy (只能在命令行窗口)命令啟動(dòng)后,會(huì)提供一個(gè)命令行界面,用戶可以實(shí)時(shí)看到發(fā)生的請(qǐng)求,并通過(guò)命令過(guò)濾請(qǐng)求,查看請(qǐng)求數(shù)據(jù)
  • mitmweb 命令啟動(dòng)后,會(huì)提供一個(gè) web 界面,用戶可以實(shí)時(shí)看到發(fā)生的請(qǐng)求,并通過(guò) GUI 交互來(lái)過(guò)濾請(qǐng)求,查看請(qǐng)求數(shù)據(jù)
  • mitmdump 命令啟動(dòng)后,沒(méi)有界面,結(jié)合自定義腳本,默默工作

代碼啟動(dòng)

方式一

import os

import set_proxy

if __name__ == '__main__':
    try:
        set_proxy(enable_proxy=True, proxy_address="http://127.0.0.1:8080")
        os.system("mitmweb")
        # os.system("mitmdump -s .\my_script.py")
    except KeyboardInterrupt:
        set_proxy(enable_proxy=False)

方式二

import asyncio
import os

from mitmproxy import options
from mitmproxy.tools.dump import DumpMaster


import set_proxy
import my_script


async def start_mitmproxy():
    opts = options.Options(listen_host='0.0.0.0', listen_port=8080)
    master = DumpMaster(opts)
    master.addons.add(my_script)
    await master.run()


if __name__ == '__main__':
    try:
        set_proxy(enable_proxy=True, proxy_address="http://127.0.0.1:8080")
        asyncio.run(start_mitmproxy())
    except KeyboardInterrupt:
        set_proxy(enable_proxy=False)

腳本

需要根據(jù)需求開(kāi)發(fā)

方式一:編寫一個(gè) py 文件,文件中定義了若干鉤子函數(shù)(可查 https://docs.mitmproxy.org/stable/api/events.html)

主要是request和response修改請(qǐng)求響應(yīng)等

import logging
import mitmproxy.http

num = 0
 
def request(flow: mitmproxy.http.HTTPFlow):
    global num
    num = num + 1
    print("We've seen %d flows" % num)

方式二:編寫一個(gè) py文件,文件定義了變量 addons插件列表,addons 是個(gè)數(shù)組,每個(gè)元素是一個(gè)類實(shí)例,這些類有若干方法,這些方法實(shí)現(xiàn)了某些 mitmproxy 提供的鉤子事件。

import logging


class Counter:
    def __init__(self):
        self.num = 0

    def request(self, flow):
        self.num = self.num + 1
        logging.info("We've seen %d flows" % self.num)


addons = [Counter()]

更多實(shí)例前往github查看 腳本示例。

這里記錄一個(gè)重訂向url的獲取:用requests可以直接拿到resp.url 或者使用 flow.response.headers.get(“location”)

到此這篇關(guān)于python+mitmproxy抓包的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python mitmproxy抓包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python數(shù)據(jù)分析中常見(jiàn)統(tǒng)計(jì)方法詳解

    Python數(shù)據(jù)分析中常見(jiàn)統(tǒng)計(jì)方法詳解

    數(shù)據(jù)分析是現(xiàn)代社會(huì)中不可或缺的一部分,通過(guò)對(duì)數(shù)據(jù)的統(tǒng)計(jì)和分析,我們可以得出有用的信息和見(jiàn)解,本文將介紹在?Python?中常見(jiàn)的數(shù)據(jù)統(tǒng)計(jì)方法,希望對(duì)大家有所幫助
    2024-02-02
  • 跟老齊學(xué)Python之復(fù)習(xí)if語(yǔ)句

    跟老齊學(xué)Python之復(fù)習(xí)if語(yǔ)句

    是否記得,在上一部分,有一講專門介紹if語(yǔ)句的:從if開(kāi)始語(yǔ)句的征程。在學(xué)習(xí)if語(yǔ)句的時(shí)候,對(duì)python編程的基礎(chǔ)知識(shí)了解的還不是很多,或許沒(méi)有做什么太復(fù)雜的東西。本講要對(duì)它進(jìn)行一番復(fù)習(xí),通過(guò)復(fù)習(xí)提高一下。如果此前有的東西忘記了,建議首先回頭看看前面那講。
    2014-10-10
  • 在cmd中查看python的安裝路徑方法

    在cmd中查看python的安裝路徑方法

    在本篇文章里小編給大家整理的是關(guān)于怎樣在cmd中查看python的安裝路徑的相關(guān)內(nèi)容,有興趣的朋友們學(xué)習(xí)參考下。
    2019-07-07
  • PyQt5的QWebEngineView使用示例

    PyQt5的QWebEngineView使用示例

    這篇文章主要介紹了PyQt5的QWebEngineView使用示例,幫助大家更好的學(xué)習(xí)和使用python,感興趣的朋友可以了解下
    2020-10-10
  • 一文詳解Python算術(shù)運(yùn)算符(加減乘除取模冪)

    一文詳解Python算術(shù)運(yùn)算符(加減乘除取模冪)

    本章講解了Python中的算術(shù)運(yùn)算符(加減乘除取模冪)的重要性和應(yīng)用場(chǎng)景,詳細(xì)介紹了其技術(shù)原理和實(shí)踐應(yīng)用,并提供了常見(jiàn)問(wèn)題與解決方案、最佳實(shí)踐和性能優(yōu)化技巧,為后續(xù)學(xué)習(xí)賦值運(yùn)算符打下基礎(chǔ),需要的朋友可以參考下
    2026-05-05
  • Python 字典一個(gè)鍵對(duì)應(yīng)多個(gè)值的方法

    Python 字典一個(gè)鍵對(duì)應(yīng)多個(gè)值的方法

    這篇文章主要介紹了Python 字典一個(gè)鍵對(duì)應(yīng)多個(gè)值的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • pydoc?生成Python代碼文檔實(shí)例

    pydoc?生成Python代碼文檔實(shí)例

    pydoc?是一個(gè)強(qiáng)大且易于使用的工具,用于生成Python代碼的文檔,通過(guò)解析代碼中的文檔字符串,?pydoc?能夠自動(dòng)生成清晰、易讀的文檔,并提供一個(gè)用戶友好的界面來(lái)查看和瀏覽文檔,本文提供了一個(gè)簡(jiǎn)單的示例
    2024-01-01
  • python函數(shù)參數(shù),名稱空間,以及函數(shù)嵌套

    python函數(shù)參數(shù),名稱空間,以及函數(shù)嵌套

    這篇文章主要給大家介紹python函數(shù)參數(shù)、名稱空間、以及函數(shù)嵌套的相關(guān)資料,想具體了解的小伙伴請(qǐng)和小編一起進(jìn)入下面文章內(nèi)容吧
    2021-10-10
  • TensorFlow如何實(shí)現(xiàn)反向傳播

    TensorFlow如何實(shí)現(xiàn)反向傳播

    這篇文章主要為大家詳細(xì)介紹了TensorFlow如何實(shí)現(xiàn)反向傳播,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • keras-siamese用自己的數(shù)據(jù)集實(shí)現(xiàn)詳解

    keras-siamese用自己的數(shù)據(jù)集實(shí)現(xiàn)詳解

    這篇文章主要介紹了keras-siamese用自己的數(shù)據(jù)集實(shí)現(xiàn)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06

最新評(píng)論

洪江市| 新田县| 株洲市| 军事| 舟山市| 荥阳市| 云阳县| 尉犁县| 都匀市| 潮安县| 栖霞市| 安国市| 沙湾县| 天水市| 措美县| 永兴县| 晋城| 崇信县| 广元市| 九台市| 罗城| 丰宁| 井研县| 宣武区| 吉安市| 共和县| 永州市| 晋宁县| 平定县| 湖南省| 曲松县| 和顺县| 溧阳市| 崇阳县| 石渠县| 宕昌县| 沿河| 长春市| 苏州市| 宝山区| 虎林市|