如何用 Proxyman 抓取 WebSocket 并解码 Protobuf 消息

如何用 Proxyman 抓取 WebSocket 并解码 Protobuf 消息 的封面图

本教程将带你完成以下内容:

  • 下载并设置 Proxyman macOS
  • 从 Google Chrome 或 iOS 应用抓取 WebSocket 流量
  • ✅ 使用 Proxyman 解码 WebSocket 流量中的 Protobuf 消息

WebSocket 是一种流行的协议,用于客户端与服务器之间的实时通信。许多现代应用会通过 WebSocket 传输 Protobuf(Protocol Buffers)序列化的数据,以获得更好的性能和更小的数据体积。

本指南介绍如何使用 Proxyman macOS 6.5.0 或更高版本抓取 WebSocket 流量并解码 Protobuf 消息。

1. 下载并设置 Proxyman macOS

开始之前,请先下载并设置 Proxyman macOS。

  1. 访问 Proxyman 官网,下载最新版本的 Proxyman macOS
  • Proxyman macOS:支持 macOS 12 或更高版本
  1. 安装 Proxyman macOS
  2. 打开 Proxyman,在 macOS 上安装证书。你可以按照 Proxyman > Certificate Menu -> Install for macOS -> Follow the instruction 中的说明操作。
  3. 切换到 Automatic 标签页,点击“Install & Trust”
  4. 确认 Proxyman 证书上显示绿色对勾
确认 Proxyman 证书上显示绿色对勾
确认 Proxyman 证书上显示绿色对勾

2. 抓取 WebSocket 流量

2.1 从 Google Chrome 抓取(开箱即用)

Proxyman 无需任何额外配置,即可抓取 Google Chrome 的 WebSocket 流量。

  1. 确保 Proxyman 正在运行
  2. 打开 Google Chrome
  3. 访问一个 WebSocket 测试网站,例如:https://echo.websocket.org/.ws
  4. 此时,你可以看到 Proxyman 已抓取到 WebSocket 流量 ✅
  5. 如果看到 SSL 加密的流量,请在 Response Panel 中点击“Enable SSL Proxying”
  6. 重新加载页面或重新连接 WebSocket,让 Proxyman 解密 WebSocket 流量 ✅
  7. 完成。你现在可以实时查看 WebSocket 消息。
Proxyman 中捕获的 Google Chrome WebSocket 消息
Proxyman 中捕获的 Google Chrome WebSocket 消息

WebSocket 流量会在 Proxyman 的流量列表中以特殊的 WebSocket 图标显示。你可以在 WebSocket 标签页中查看发送和接收的消息。

2.2 从 iOS 应用抓取

如果你的 iOS 应用使用 URLSessionWebSocketTask 或 iOS 的 WebSocket 库(例如 Starscream、SocketRocket),则需要配置 SOCKS Proxy 才能抓取 WebSocket 流量。

这是因为 URLSessionWebSocketTask 默认不遵循系统的 HTTP 代理设置。

有关从 iOS 应用抓取 WebSocket 的详细说明,请参阅我们的专门教程:使用 Proxyman 拦截并调试 iOS 模拟器和真机上的 WebSocket

以下是简要步骤:

  1. 在 Proxyman 中启用 SOCKS Proxy:Tools -> Proxy Settings -> SOCKS Proxy settings -> Enable
  2. 记下端口号(默认为 8889)
  3. 配置你的 iOS 应用,使其使用 Proxyman 的 SOCKS Proxy Server

3. 解码 Protobuf 消息

需要 Proxyman macOS 6.5.0 或更高版本。如果你在使用旧版本,请更新 Proxyman。

抓取到 WebSocket 流量后,你可以直接在 Proxyman 中解码 Protobuf 消息。

3.1 使用原始模式解码(快速但不精确)

当你没有 Protobuf 定义文件(.proto)时,原始模式很有用。Proxyman 会尝试解码二进制数据并显示其中的字段。

  1. 在 Proxyman 中选择一个 WebSocket 流量
  2. 找到包含 Protobuf 数据的 WebSocket 消息
  3. 右键点击该 Protobuf 消息 -> Protobuf -> Decode
  4. 选择 Raw Mode
  5. 完成。Proxyman 会解码并显示 Protobuf 字段 ✅
右键点击以解码 Protobuf 消息
右键点击以解码 Protobuf 消息
在原始模式下解码的 Protobuf
在原始模式下解码的 Protobuf

原始模式会显示字段编号和推断出的类型。没有 .proto 文件时无法显示字段名称,但你仍然可以查看数据结构。

3.2 使用消息类型解码(推荐)

如果你有 Protobuf 描述文件(.desc),就可以解码出带有正确字段名和类型的消息。

  1. 在 Proxyman 中选择一个 WebSocket 流量
  2. 找到包含 Protobuf 数据的 WebSocket 消息
  3. 右键点击该 Protobuf 消息 -> Protobuf -> Decode
  4. 选择 Message Type
  5. 从 Protobuf 描述文件中选择消息类型
选择用于解码 Protobuf 的消息类型
选择用于解码 Protobuf 的消息类型

如果找不到你的消息类型,请点击“Import Schema”按钮,将 .desc 文件导入 Proxyman。

如需了解如何从 .proto 文件生成 .desc 文件,请参阅此文档:如何从 .proto 文件生成 .desc 文件

  1. 完成。Proxyman 会以正确的字段名解码消息 ✅
使用消息类型解码的 Protobuf
使用消息类型解码的 Protobuf

要从 .proto 文件生成 .desc 文件,请使用 protoc 编译器: protoc --descriptor_set_out=message.desc --include_imports your_message.proto

--include_imports 选项会加入被导入的 .proto 文件所使用的消息类型。如果没有它,Proxyman 可能找不到主 schema 中看似存在的类型。在没有 schema 时,原始模式依然有用,但其字段类型只是推测;当字段名和类型必须准确时,请使用描述文件。

4. 常见问题与解决方法

4.1 无法看到 iOS 应用的 WebSocket 流量

解决方法:iOS 的 WebSocket 库不遵循 HTTP 代理设置。你需要在 Proxyman 中启用 SOCKS Proxy,并配置应用使用它。详细步骤请参阅我们的 WebSocket 调试教程。

4.2 没有 Protobuf 解码选项

解决方法:请确认你使用的是 Proxyman macOS 6.5.0 或更高版本。你可以在 Proxyman -> About Proxyman 中查看版本,并前往 proxyman.com 更新。

4.3 原始模式显示的字段类型不正确

解决方法:原始模式使用启发式规则推断字段类型。如需准确解码,请使用消息类型模式并配合你的 Protobuf 描述文件。

4.4 能看到 WebSocket 流量,但消息是加密的

解决方法:请确认已为该域名启用 SSL Proxying。右键点击该流量 -> Enable SSL Proxying,然后重新连接 WebSocket。

5. 总结

在本教程中,我们学习了如何:

  • 使用 Proxyman 抓取 Google Chrome 和 iOS 应用的 WebSocket 流量
  • 使用原始模式(无需 .proto 文件)或消息类型模式(需要 .proto 文件)解码 Protobuf 消息

你可能还会觉得以下教程有帮助:


Proxyman 是一款高性能的 macOS/Windows/Linux 应用,可帮助开发者抓取浏览器、iOS 设备、iOS 模拟器和 Android 设备的 HTTP/HTTPS 和 WebSocket 流量。

下载地址:https://proxyman.com

Noah Tran
Noah Tran

最后修订于 2026年7月18日。 新增了描述文件导入指南,并提醒原始模式的字段类型可能只是推测。

将 WebSocket 二进制消息转换为可读字段

抓取 WebSocket,导入你的 Protobuf schema,然后在 Proxyman 中查看发送和接收的消息。

下载适用于 macOS 的 Proxyman