让协议字节可核对

Protobuf 在线解码器

先检查原始 Wire 字节;需要字段名时,再粘贴自包含的 .proto 并选择消息类型。

Protobuf 在线解码器

输入

可选 .proto schema

结果

字节与 schema 仅在当前浏览器处理,不上传。

选项

输入 Wire 消息或 Varint。

排查抓包或日志时,Protobuf 在线解码器能先把一串十六进制字节拆成字段号、Wire Type 和偏移。即使拿不到 schema,也能确认数据从哪里开始、到哪里结束。

无 schema 解码 Protobuf 只能做结构判断,不能恢复业务字段名。对 length-delimited 值,文本、嵌套消息和原始 bytes 都可能成立;看到可读字符串也别立刻认定它是 string。

为什么用 Protobuf 在线解码器?

把猜测和真实字节分开放。

按偏移回到原始数据

Protobuf 在线解码器在每个字段旁保留 0 基起止偏移、Wire Type 和原始 Hex。长度不足会指出出错位置,便于回到抓包内容逐字节核对。

一排二进制字节分成多个字段,每段连接到对应的起止位置。

有 schema 时再补上语义

粘贴单文件 .proto 后,选择消息类型即可查看命名 JSON。原始 Wire 树仍在旁边,字段名和类型化值都有对应的字节证据。

原始字段树与依据 schema 得到的结构树并排对应。

读懂结果前先核对三件事

01

手动确认输入编码

默认按 Hex 解析,允许空格、冒号和 0x 前缀;输入来自 Base64 时要主动切换。短字符串可能同时符合两种格式,自动猜测容易错。

02

把候选值当作候选

Protobuf Wire Format 只存少量线索。Wire Type 0 的数值可能是布尔值或枚举;Wire Type 2 也可能是文本、packed 数组或子消息。

03

看清偏移与过期状态

自动解析等待 350 毫秒;关掉后可用 Ctrl/Cmd + Enter。输入或选项一变,复制和下载立即禁用;区间结束偏移不包含下一字节。

从字节到可核对的结构

常见 Wire 字段逐项展开

Protobuf 在线解码器读取 Varint、fixed64、length-delimited 和 fixed32。截断的字段与旧式 group 会明确报错,不会把剩余字节悄悄跳过。

精确处理 Varint

Varint 变长整数编码最多占 10 字节。独立模式可将 Hex 转成 uint64 或 ZigZag sint64,也能把十进制数反向编码;BigInt 保住 64 位整数精度。

按 .proto 解释字段

自包含 schema 可以解析重复字段和嵌套消息,输出带字段名的 JSON。若类型与 payload 不匹配,原始 Wire 结果仍可供排查。

导出原包对应的 Hex

Protobuf 在线解析后的 Hex 导出只规范化输入字节的写法,不根据猜测重新编码消息;与抓包逐字节比对不会被二次序列化干扰。

哪些含义不能从字节推断

字段名不会凭空出现
Protobuf 在线解码器在没有 .proto 时只知道字段号和 Wire Type,不知道字段名、枚举名称或 oneof 关系。任何自动命名都会误导排错。
候选解释不是类型断言
可读 UTF-8 与可解析的子消息可能同时出现。无 schema 的结果只列候选,真正的声明类型必须回到 .proto 确认。
只读本地 schema
当前仅接受粘贴的单文件定义,不请求远程 URL,也不解析 import 依赖。请先在项目中处理好依赖再粘贴可独立解析的内容。
不处理传输封装
输入应是原始消息字节,而非带五字节头的 gRPC 帧或压缩包;这里也不提供 JSON 到整包 Protobuf 的编码。旧式 group 会在对应偏移报错。

Protobuf 在线解码器常见问题

没有 .proto 文件也能解码 Protobuf 数据吗?

可以查看 Wire 结构、字段号、偏移与原始字节,但没有 .proto 就无法确定真实字段名和声明类型。

Protobuf Wire Format 的编码原理是什么?

Wire Format 由字段号和 Wire Type 组成。它告诉解析器怎样跨过一个值,却不会带上完整的业务类型说明。

什么是 Varint 变长整数编码?

Varint 用每个字节的最高位表示是否继续,低七位存数据。uint64 与 ZigZag sint64 会对同一原始值给出不同解释。

Protobuf 的 Wire Type 有哪几种?

常见类型有 0 Varint、1 fixed64、2 length-delimited、5 fixed32。旧式 group 使用 3 和 4,本工具明确报不支持。

为什么解出的字段类型有时候不准?

因为 length-delimited 可能是字符串、bytes、packed 数组或子消息。仅凭字节猜类型会出现误判,提供 schema 才能确定。

遇到了应当支持的协议定义?

继续用 Protobuf 在线解码器核对

下一次抓包时,把 Protobuf 在线解码器显示的偏移、原始 Hex 和可选 schema 结果一起对照,再决定字段的真实含义。