当前位置:首页 > 工具 > 正文内容

使用 mitmdump 实现 HTTP 流量捕获与数据导出

访客 工具 2026年7月3日 1

通过 mitmdump 工具可以实现对 HTTP/HTTPS 请求的实时监听与数据提取,类似于性能测试工具 LoadRunner 的脚本录制功能。该方法结合 Python 脚本可将请求信息自动保存为结构化数据,便于后续用于接口测试或自动化场景构建。

环境准备

安装 mitmproxy 套件:

pip install mitmproxy

mitmproxy 提供三个主要组件:

  • mitmproxy:终端下的交互式抓包工具
  • mitmweb:基于 Web UI 的图形化界面
  • mitmdump:命令行模式,支持加载自定义 Python 脚本处理流量

前置配置

  1. 若需抓取 HTTPS 流量,需在目标设备上安装 mitmproxy 根证书(访问 http://mitm.it 下载并安装)
  2. 设置系统或浏览器代理为:127.0.0.1:8080

Python 脚本示例

以下脚本用于监听指定域名的请求,并提取关键字段写入 Excel 文件:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from mitmproxy import http
import xlwt

class RequestCapture:
    def __init__(self, target_host: str = "192.168.**.***", output_file: str = "./data/request_output.xls"):
        self.host_filter = target_host
        self.output_path = output_file
        self.recorded_data = []

        # 定义表头字段
        self.headers = [
            "Method",
            "Full URL",
            "Host",
            "Path",
            "Query Params (Text)",
            "Request Body",
            "Headers",
            "Cookies"
        ]
        self.recorded_data.append(self.headers)

    def request(self, flow: http.HTTPFlow) -> None:
        url = flow.request.pretty_url
        host = flow.request.host

        if self.host_filter in host:
            print("\n" + "="*50)
            print("捕捉到目标请求,正在记录...")
            print("="*50)

            method = flow.request.method
            path = flow.request.path
            query_text = flow.request.get_text() or ""
            body_text = flow.request.text or ""
            header_dict = dict(flow.request.headers)
            cookies_dict = dict(flow.request.cookies)

            # 打印捕获内容
            print(f"请求方式: {method}")
            print(f"完整地址: {url}")
            print(f"主机名: {host}")
            print(f"路径: {path}")
            print(f"查询参数: {query_text}")
            print(f"请求体: {body_text}")
            print(f"请求头: {header_dict}")
            print(f"Cookies: {cookies_dict}")

            # 构建数据行
            entry = [
                method,
                url,
                host,
                path,
                query_text,
                body_text,
                str(header_dict),
                str(cookies_dict)
            ]

            self.recorded_data.append(entry)
            self.save_to_excel()

    def save_to_excel(self):
        try:
            workbook = xlwt.Workbook(encoding='utf-8')
            sheet = workbook.add_sheet("Captured Requests")

            for row_idx, row_data in enumerate(self.recorded_data):
                for col_idx, cell_value in enumerate(row_data):
                    sheet.write(row_idx, col_idx, cell_value)

            workbook.save(self.output_path)
            print("✅ 数据已成功写入 Excel")
        except Exception as e:
            print(f"❌ 写入失败: {e}")

# 注册插件
addons = [RequestCapture()]

运行方式

将上述脚本保存为 capture.py,然后在终端执行:

mitmdump -s capture.py

此时所有符合条件的请求将在控制台输出,并实时追加至指定 Excel 文件中。

输出效果

运行后,在用户操作浏览器或移动应用的过程中,脚本会自动捕获通信数据并生成如下格式的表格记录:

  • 列包括:请求方法、完整URL、主机、路径、查询参数、请求体、请求头字符串、Cookie信息
  • 每条请求对应一行,可用于后期生成测试用例或回放脚本

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。