祈灵工具箱

💾Protobuf 在线解码 - MessagePack、CBOR、BSON 二进制解析

抓包拿到一串 gRPC / Protobuf 字节、Redis 里存着 MessagePack、设备上报的是 CBOR、MongoDB 导出的是 BSON——这个工具可以直接把它们拆开看。粘贴十六进制(空格、0x、\x 格式都可以)或 Base64,也可以打开文件,工具会自动判断数据格式。Protobuf 在没有 schema 时按线格式逐字段解析:显示字段号与 wire type,varint 同时给出无符号、有符号 int64 和 zigzag(sint)解读,fixed32/64 同时给出整数与浮点数,长度分隔字段会依次尝试可打印字符串、嵌套消息、packed 重复字段,其余作为 bytes 显示,并列出其它可能的解读;输出与 protoc --decode_raw 相似的文本。如果有 .proto 文件,粘贴进来就能按字段名、枚举名解码,支持 message / enum / 嵌套类型 / repeated / packed / map / oneof。MessagePack 支持全部类型和 timestamp 扩展;CBOR 遵循 RFC 8949,支持 tag(日期、大整数、UUID、内嵌 CBOR 等)、半精度浮点和不定长字符串 / 数组 / map,并输出诊断记法;BSON 支持 ObjectId、日期、Decimal128、二进制等类型,以 Extended JSON 输出。结果以树形结构和 JSON 两种方式展示:鼠标移到节点上,右侧十六进制视图会高亮对应字节;点击某个字节可定位到所属节点;解码失败时标出出错位置。还可以反向把 JSON 编码成 MessagePack、CBOR 或 BSON。全部在浏览器本地完成。

免费 · 无需注册 · 浏览器本地处理最后更新:

正在加载工具...

如何使用Protobuf / MessagePack / CBOR / BSON 解码器

  1. 1粘贴十六进制或 Base64,或打开二进制文件
  2. 2选择数据格式(默认自动识别);Protobuf 可选填 .proto 定义并选择根消息
  3. 3在树形视图与十六进制视图之间对照查看,复制 JSON 结果

常见问题

没有 .proto 文件能解析 Protobuf 吗?
可以。Protobuf 的线格式本身带有字段号和 wire type,工具能完整拆出结构,但不知道字段名和确切类型:varint 可能是 int、bool、enum 或 zigzag 编码的 sint,长度分隔字段可能是字符串、bytes、嵌套消息或 packed 数组。工具会按最可能的方式显示,并在灰色说明里列出其它解读。有 .proto 时粘贴进来即可得到准确结果。
gRPC 抓包数据要怎么处理?
gRPC 每条消息前有 5 字节的帧头:1 字节压缩标志 + 4 字节大端长度。请去掉这 5 个字节再粘贴;如果压缩标志为 1,数据还经过 gzip 压缩,需要先解压。gRPC-Web 的 Base64 文本格式同理,Base64 解码后去掉帧头即可。
为什么同一段数据会被识别成不同格式?
这几种格式都没有魔数,很短的数据往往同时是合法的 Protobuf、MessagePack 和 CBOR。自动识别会优先选完整解码、结构更合理的那种(BSON 有长度头,最容易确定)。识别不对时,在“数据格式”里手动选择即可。
大整数和二进制数据在 JSON 里怎么表示?
超过 JavaScript 安全整数范围(2^53)的整数以字符串输出,避免精度丢失;bytes / 二进制数据输出为 Base64 字符串(与 Protobuf 的 JSON 映射一致)。BSON 使用 MongoDB Extended JSON,例如 {"$oid": "…"}、{"$date": …}、{"$numberLong": "…"},这样再编码回 BSON 时类型不会丢失。