Python Mitmproxy详解:从入门到实战

一、Mitmproxy简介

Mitmproxy是一款开源的交互式HTTPS代理工具,支持拦截、修改和重放HTTP/HTTPS流量。其核心优势在于:

  • 多平台支持:兼容Windows、macOS、Linux
  • 三端工具:提供命令行(mitmproxy)、Web界面(mitmweb)、数据流处理(mitmdump)
  • Python集成:通过API可实现高度定制化的流量处理
  • SSL/TLS支持:自动生成证书实现HTTPS解密

二、安装与配置

2.1 环境准备

# 安装Python 3.8+(以Windows为例)
# 官方下载地址:https://www.python.org/downloads/
# 配置环境变量后执行
pip install mitmproxy
mitmdump --version  # 验证安装

2.2 证书安装

  1. 启动代理服务:
mitmdump -p 8080
  1. 移动端配置:
    • 手机连接与PC同网段的WiFi
    • 设置代理:IP为PC地址,端口8080
    • 浏览器访问http://mitm.it下载对应平台证书

三、核心功能详解

3.1 流量拦截与修改

基础模板

from mitmproxy import http, ctx

class RequestModifier:
    def request(self, flow: http.HTTPFlow):
        # 修改请求头
        flow.request.headers["User-Agent"] = "MitmProxy/1.0"
        
        # 修改GET参数
        if "orderNo" in flow.request.query:
            flow.request.query["orderNo"] = "NEW_ORDER_ID"

    def response(self, flow: http.HTTPFlow):
        # 篡改响应内容
        if "error" in flow.response.text:
            flow.response.text = '{"status":"success"}'

addons = [RequestModifier()]

3.2 数据持久化存储

import json
from mitmproxy import http

class DataLogger:
    def response(self, flow: http.HTTPFlow):
        data = {
            "url": flow.request.url,
            "method": flow.request.method,
            "status": flow.response.status_code,
            "content": json.loads(flow.response.text)
        }
        with open("api_logs.json", "a") as f:
            json.dump(data, f)
            f.write("\n")

3.3 自动化测试用例生成

import csv
from mitmproxy import http

class TestCaseGenerator:
    def __init__(self):
        self.csvfile = open('test_cases.csv', 'w', newline='')
        writer = csv.writer(self.csvfile)
        writer.writerow(["URL", "Method", "Request", "Expected"])

    def response(self, flow: http.HTTPFlow):
        writer = csv.writer(self.csvfile)
        writer.writerow([
            flow.request.url,
            flow.request.method,
            flow.request.text,
            flow.response.status_code
        ])

    def done(self):
        self.csvfile.close()

四、实战场景

4.1 电商API压力测试

from mitmproxy import http
import time

class StressTester:
    def __init__(self):
        self.start_time = time.time()
    
    def response(self, flow: http.HTTPFlow):
        elapsed = time.time() - self.start_time
        ctx.log.info(f"API {flow.request.url} 响应时间: {elapsed:.2f}s")
        
        if flow.response.status_code >= 500:
            ctx.log.error(f"服务异常: {flow.response.text}")

4.2 社交APP数据脱敏

import re
from mitmproxy import http

class DataMasker:
    PHONE_RE = re.compile(r'1\d{10}')
    
    def response(self, flow: http.HTTPFlow):
        if "user_profile" in flow.request.url:
            mask_text = self.PHONE_RE.sub("138****0000", flow.response.text)
            flow.response.text = mask_text

五、高级技巧

5.1 流量重放攻击

# 保存流量到文件
mitmdump -w traffic.dump

# 后续重放
mitmdump -n -r traffic.dump -s replay_script.py

5.2 混合使用BurpSuite

# BurpSuite配置upstream代理
mitmdump --mode upstream:http://localhost:8080 --set upstream_cert=true

六、最佳实践

  1. 安全建议

    • 测试环境使用自签名证书
    • 生产环境禁用Mitmproxy
    • 定期轮换CA证书
  2. 性能优化

    # 使用并发处理提升性能
    from mitmproxy.script import concurrent
    
    class ConcurrentHandler:
        @concurrent
        def response(self, flow):
            # 高并发场景下的处理逻辑
    
  3. 调试技巧

    # 启动时增加日志级别
    mitmweb -v --set console_eventlog_verbosity=debug
    

七、总结

Mitmproxy作为功能强大的流量分析工具,在以下场景展现独特价值:

  • 接口测试:自动化生成测试用例
  • 安全审计:发现敏感信息泄露
  • 性能优化:定位慢查询接口
  • 协议分析:研究未知API结构

通过Python API的深度集成,开发者可以构建从流量捕获、修改到分析的完整处理链路,显著提升研发效率。建议结合具体业务场景,逐步构建企业级流量处理平台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

detayun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值