Mac安装mitmproxy及操作对监控的请求

发布于:2025-08-30 ⋅ 阅读:(17) ⋅ 点赞:(0)

在 macOS 上安装和配置 mitmproxy 是一个相对简单的过程,可以使用常见的包管理工具如 Homebrew 或直接通过 Python 的包管理工具 pip。以下是详细的安装步骤:

方法一:使用 Homebrew 安装
Homebrew 是 macOS 上流行的包管理工具。它可以快速安装 mitmproxy。

安装过程:
1、更新 Homebrew
运行以下命令以确保 Homebrew 是最新的:

brew update

2、安装 mitmproxy
使用 Homebrew 安装 mitmproxy:

brew install mitmproxy

3、验证安装
安装完成后,可以通过以下命令验证版本:

mitmproxy --version

4、输出版本信息即表示安装成功。
启动 mitmproxy 或 mitmweb
启动 mitmproxy:

mitmproxy --listen-host 0.0.0.0 --listen-port 8080

启动 mitmweb(显示 GUI):

mitmweb --listen-host 0.0.0.0 --listen-port 8080

方法二:使用 Python 的 pip 安装
如果没有使用 Homebrew,也可以通过 Python 的包管理工具 pip 安装 mitmproxy,因为它是用 Python 编写的。

安装过程:
1、确保 macOS 上已安装 Python 3
检查 Python 版本,运行以下命令:

python3 --version

如果尚未安装,可以通过 Homebrew 安装:

brew install python

2、升级 pip
在安装 mitmproxy 之前,建议确保 pip 已更新:

python3 -m pip install --upgrade pip

3、安装 mitmproxy
使用 pip 安装 mitmproxy:

python3 -m pip install mitmproxy

4、验证安装
检查 mitmproxy 版本确认安装是否成功:

mitmproxy --version

启动 mitmproxy 或 mitmweb

启动 mitmproxy:

mitmproxy --listen-host 0.0.0.0 --listen-port 8080

启动 mitmweb(显示 GUI):

mitmweb --listen-host 0.0.0.0 --listen-port 8080

配置 mitmproxy
配置代理
1、设置代理:
在 macOS 的系统设置中,进入 Wi-Fi > 网络设置 > 高级选项 > 代理。
配置 HTTP/HTTPS 代理地址为 127.0.0.1:8080 或运行 mitmproxy 的本地 IP 和端口号。
2、配置证书信任(确保可以抓 HTTPS 流量)
mitmproxy 默认会拦截 HTTPS 流量,但需要用户设备信任其自签名证书。以下是设置证书信任的步骤:
1、安装证书:
在设备浏览器中访问 http://mitm.it,并按照提示下载 mitmproxy 的证书。
下载后会生成一个 *.pem 文件。
2、将证书导入 macOS 的钥匙串中:
双击 .pem 文件,系统会自动导入到钥匙串工具中。
在 钥匙串访问 中找到导入的证书。
右击证书,选择 信息,然后设置为 始终信任。
3、验证证书是否生效:
再次运行 mitmproxy 或 mitmweb,进行流量捕获测试。

常见问题和解决方法

  1. mitmproxy 未显示流量
    解决办法:
    确保代理端口设置正确,应用是否连接到 127.0.0.1:8080。
    配置证书信任,确保 HTTPS 请求能够被解密。
  2. Python 版本不兼容
    如果系统自带的 Python 版本较低(如 2.x),建议安装最新版 Python:
brew install python
  1. GUI (mitmweb) 不显示流量
    流量过多时可能存在延迟,增加资源限制:
mitmweb --set connection_strategy=eager

检查过滤器是否存在:
清空过滤器规则,显示所有流量。

mitmproxy 提供了扩展 API,允许编写 Python 脚本对流量进行操作,如捕获、过滤和处理 HTTP 请求。

以下是一个 Python 脚本,能够捕获 HTTP 请求并存储到集合中:

from mitmproxy import http
import json

# 全局请求列表
http_requests = []
def read_json(file_path):
    """
    读取 JSON 文件数据
    """
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            data = json.load(file)  # 加载 JSON 数据为 Python 对象
        return data
    except FileNotFoundError:
        print(f"{file_path} 不存在,将创建新文件。")
        return {}  # 如果文件不存在,返回一个空字典
    except json.JSONDecodeError:
        print(f"无法解析 {file_path},请确保文件内容是合法的 JSON。")
        return {}

def request(flow: http.HTTPFlow) -> None:
    """
    每次捕获 HTTP 请求时执行此回调函数
    """
    global http_requests

    # 提取请求的基本信息
    url = flow.request.url
    method = flow.request.method
    headers = dict(flow.request.headers)
    content = flow.request.text

    # 将请求信息存入集合
    request_data = {
        "url": url,
        "method": method,
        "headers": headers,
        "content": content,
    }
    http_requests.append(request_data)

    print(f"捕获请求: {url}")

def response(flow: http.HTTPFlow) -> None:
    """
    每次捕获 HTTP 响应时执行此回调函数
    """
    global http_requests
    url = flow.request.url

    print(f"完成响应: {url}")

def done():
    """
    在 mitmproxy 运行结束时保存请求集合的数据
    """
    global http_requests

    # 将捕获的请求保存到文件
    with open("http_requests.json", "w", encoding="utf-8") as f:
        json.dump(http_requests, f, indent=4)

    print(f"捕获了 {len(http_requests)} 个 HTTP 请求,已保存到 'http_requests.json'")

如何使用以上脚本

  1. 保存脚本文件
    将上述代码保存到文件中,例如 capture_requests.py。

  2. 启动 mitmproxy 并加载脚本
    通过 mitmproxy 或 mitmdump 加载脚本。例如:

mitmproxy -s capture_requests.py

或者使用 mitmdump(无界面模式):

mitmdump -s capture_requests.py
  1. 捕获流量
    确保目标设备正确配置代理到运行 mitmproxy 的机器,同时安装并信任 CA 证书。完成流量操作后,脚本会自动将请求数据保存到 http_requests.json。