【mitmproxy】通过 mitmproxy 的HTTP代理模式获取 OpenCode 发起的 AI API 请求的详细信息

文章目录

    • 前言
    • [一.启动 mitmproxy 常规(HTTP)代理](#一.启动 mitmproxy 常规(HTTP)代理)
      • [1.1 配置文件方式(推荐)](#1.1 配置文件方式(推荐))
    • [二.下载并安装 mitmproxy 的 CA 证书](#二.下载并安装 mitmproxy 的 CA 证书)
      • [2.1 配置浏览器代理](#2.1 配置浏览器代理)
      • [2.2 下载并安装证书](#2.2 下载并安装证书)
    • [三、以代理方式启动并使用 OpenCode](#三、以代理方式启动并使用 OpenCode)
      • [3.1 配置环境变量](#3.1 配置环境变量)
      • [3.2 启动 OpenCode](#3.2 启动 OpenCode)
    • 四、查看捕获的流量
      • [4.1 关键信息位置](#4.1 关键信息位置)
      • [4.2 示例:生成会话标题的请求](#4.2 示例:生成会话标题的请求)
      • [4.3 示例:会话请求](#4.3 示例:会话请求)
    • 五、进阶技巧与注意事项
      • [5.1 处理 HTTPS 流量解密问题](#5.1 处理 HTTPS 流量解密问题)
      • [5.2 保存与分析捕获的数据](#5.2 保存与分析捕获的数据)
      • [5.3 自动化与高级过滤](#5.3 自动化与高级过滤)
      • [5.4 注意事项与合规性](#5.4 注意事项与合规性)

前言

在上一篇文章中,我们介绍了 如何通过 mitmproxy 的本地捕获代理模式,获取 OpenCode 发起的 AI API 请求的详细信息

本文将介绍另一种方式------通过 常规(HTTP)代理模式 来实现相同的目标。

一.启动 mitmproxy 常规(HTTP)代理

1.1 配置文件方式(推荐)

为了便于维护和管理,建议创建配置文件 ~/.mitmproxy/config.yaml ,将代理服务器的配置项持久化保存。这样可以避免每次启动时输入大量命令行参数。

yml 复制代码
# ==========代理模式配置==========
# 要生成的代理服务器类型。可以多次传递。Mitmproxy 支持 "regular"(HTTP)、"local"、"transparent"、"socks5"、"reverse:SPEC"、"upstream:SPEC "和 "wireguard[:PATH]"代理服务器。默认值:['regular']
mode:
  - regular
# 绑定代理服务器的端口(可根据具体模式重设,参见 `mode`)。默认情况下,端口与模式有关。默认的常规 HTTP 代理服务器端口为 8080。默认值:None
listen_port: 8080
# 网络用户界面端口。默认值:8081
web_port: 8081

# ==========安全与连接配置==========
# 使用主机头来构建要显示的 URL。
# 此选项默认已禁用,因为恶意应用程序可能会发送误导性的主机头来规避您的分析。如果不担心此问题,请启用此选项以获得更好的流量显示。
showhost: true
# 不验证上游服务器的 SSL/TLS 证书。如果启用此选项,将跳过证书验证,而 mitmproxy 本身将容易受到 TLS 拦截的攻击
ssl_insecure: true
# 上游证书。连接到上游服务器以查询证书详细信息。默认值:True
upstream_cert: false
# 连接策略。设置为懒惰时,mitmproxy 会尽量推迟建立上游连接。这样就可以在离线时使用服务器重放。选项:eager, lazy。默认值:eager
connection_strategy: lazy
# 忽略主机列表,转发所有流量而不进行处理。
ignore_hosts: []

# ==========TLS 版本配置(放宽限制以提高兼容性)==========
# 设置客户端连接的最小 TLS 版本。UNBOUNDED、SSL3、TLS1 和 TLS1_1 是不安全的。选项值:UNBOUNDED, SSL3, TLS1, TLS1_1, TLS1_2, TLS1_3。默认值:TLS1_2
tls_version_client_min: UNBOUNDED
# 设置客户端连接的最大 TLS 版本。UNBOUNDED、SSL3、TLS1 和 TLS1_1 是不安全的。默认值:UNBOUNDED
tls_version_client_max: UNBOUNDED
# 设置服务器连接的最小 TLS 版本。UNBOUNDED、SSL3、TLS1 和 TLS1_1 是不安全的。默认值:TLS1_2
tls_version_server_min: UNBOUNDED
# 设置服务器连接的最大 TLS 版本。UNBOUNDED、SSL3、TLS1 和 TLS1_1 是不安全的。默认值:UNBOUNDED
tls_version_server_max: UNBOUNDED

# ==========日志配置==========
# 日志详细程度。选项:error, warn, info, alert, debug。默认值:info
termlog_verbosity: debug
# 事件日志详细程度。选项:error, warn, info, alert, debug。默认值:info
console_eventlog_verbosity: debug
# 在流程列表中显示的列。
web_columns:
  - timestamp
  - tls
  - icon
  - path
  - method
  - status
  - size
  - time

配置完成后,只需在命令行运行以下命令即可启动 mitmproxy

bash 复制代码
mitmweb

启动后,系统会自动打开 Web 管理界面,访问地址为:http://127.0.0.1:8081

二.下载并安装 mitmproxy 的 CA 证书

由于 mitmproxy 需要解密 HTTPS 流量,因此必须安装其 CA 证书才能正常工作。以下是详细步骤:

2.1 配置浏览器代理

首先,设置浏览器的 HTTP 代理:

  • 代理地址127.0.0.1
  • 代理端口8080(即前面配置文件中 listen_port 的值)

2.2 下载并安装证书

  1. 重启浏览器(确保代理设置生效)
  2. 访问证书下载页面:https://mitm.it/
  3. 根据你的操作系统下载对应的证书
  4. 安装证书时,务必选择"受信任的根证书颁发机构"存储位置

重要提示:证书安装完成后,建议再次重启浏览器,确保证书生效。

三、以代理方式启动并使用 OpenCode

在启动 OpenCode 之前,需要配置环境变量,使其流量通过 mitmproxy 代理。请按照以下步骤操作:

3.1 配置环境变量

打开命令提示符(CMD)或 PowerShell,依次执行以下命令:

Windows CMD:

shell 复制代码
set NODE_TLS_REJECT_UNAUTHORIZED=0
set PYTHONHTTPSVERIFY=0
set HTTP_PROXY=http://127.0.0.1:8080
set HTTPS_PROXY=http://127.0.0.1:8080

Windows PowerShell:

powershell 复制代码
$env:NODE_TLS_REJECT_UNAUTHORIZED="0"
$env:PYTHONHTTPSVERIFY="0"
$env:HTTP_PROXY="http://127.0.0.1:8080"
$env:HTTPS_PROXY="http://127.0.0.1:8080"

说明

  • NODE_TLS_REJECT_UNAUTHORIZED=0:禁用 Node.js 的 TLS 证书验证
  • PYTHONHTTPSVERIFY=0:禁用 Python 的 HTTPS 证书验证
  • HTTP_PROXYHTTPS_PROXY:设置代理服务器地址

3.2 启动 OpenCode

在同一个命令行窗口中,运行 OpenCode

cmd 复制代码
opencode

启动后,选择大语言模型,输入提示词,按回车键发送请求。

四、查看捕获的流量

OpenCode 发起 API 请求后,可以在 mitmproxyWeb 界面中查看捕获的所有流量。以下是关键信息的查看方法:

4.1 关键信息位置

  • URL :在请求详情中查看完整的 API 端点路径
  • 请求头(Headers) :检查 Headers 部分,重点关注 AuthorizationContent-Type 等关键字段
  • 请求体(Request Body) :对于 POST 请求,在 Request Body 中查看 JSON 或表单数据
  • 响应(Response) :在 Response 标签页中查看状态码、响应头和返回的 JSON 数据

4.2 示例:生成会话标题的请求

以下是生成会话标题的请求和响应示例:

4.3 示例:会话请求

以下是实际会话的请求和响应示例:

五、进阶技巧与注意事项

5.1 处理 HTTPS 流量解密问题

如果遇到 HTTPS 请求显示为乱码或无法解密的情况,请检查以下几点:

  1. 证书安装 :确保已正确安装 mitmproxyCA 证书,并设置为"受信任的根证书颁发机构"
  2. 证书信任 :确保系统或应用程序( OpenCode )信任该证书,否则可能出现 TLS 拦截失败
  3. 证书下载 :访问 https://mitm.it/ 下载对应平台的证书(支持 Windows、macOS、Android、iOS

5.2 保存与分析捕获的数据

mitmproxy 提供了多种方式保存捕获的流量数据:

方法一:命令行参数

bash 复制代码
mitmweb --save-flows flows.json

方法二:Web 界面导出

Web 管理界面中,使用导出功能将会话保存为文件(如 flows.json)。

方法三:Python 脚本解析

导出后,可以使用 Python 脚本解析文件,提取结构化数据供进一步分析:

python 复制代码
import json

with open('flows.json', 'r') as f:
    flows = json.load(f)
    for flow in flows:
        print(f"URL: {flow['request']['url']}")
        print(f"Method: {flow['request']['method']}")

5.3 自动化与高级过滤

可以通过编写 mitmproxy 脚本(Python)实现自动过滤和捕获目标请求:

python 复制代码
def request(flow):
    """
    自动捕获 OpenCode API 请求
    """
    if "api.opencode.ai" in flow.request.url:
        print(f"捕获到请求: {flow.request.url}")
        print(f"请求头: {flow.request.headers}")
        print(f"请求体: {flow.request.content}")

使用方法:

bash 复制代码
mitmweb -s filter_script.py

通过正则表达式或域名匹配,可以精准捕获特定的 API 路径。

5.4 注意事项与合规性

在使用 mitmproxy 捕获流量时,请注意以下事项:

  1. 遵守服务条款 :确保操作符合 OpenCode 的服务条款,仅用于合法调试或学习目的
  2. 数据安全:避免拦截敏感或个人数据,建议在测试环境中进行
  3. 双向 TLS :如果 API 使用双向 TLS 或其他加密机制,需要额外配置客户端证书
  4. 隐私保护:不要分享或公开包含敏感信息的流量数据
相关推荐
nikolay2 小时前
AI重塑企业信息安全:攻防升级与信任重构
网络·人工智能·网络安全
Yupureki2 小时前
《Linux网络编程》6.UDP原理
linux·运维·服务器·网络·udp
wapicn993 小时前
设置好这一步,让你的SSL证书在到期前自动续期,永不过期
网络·网络协议·ssl
Harvy_没救了3 小时前
【网络运维】 WordPress 部署复盘
运维·网络
笨笨饿4 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发
孙同学_4 小时前
一文带你了解:从浏览器发起HTTP请求到得到网页的整个过程
网络·网络协议·http
Shan12054 小时前
站在计算机领域视角看:SQL注入攻击
网络·数据库·sql
β添砖java5 小时前
深度学习(21)使用块的网络VGG
网络·人工智能·深度学习
数智工坊6 小时前
【ECNDNet论文阅读|图像去噪经典】:融合残差、BN与空洞卷积的增强型去噪网络
网络·论文阅读