gRPC 消息调试与处理
面向 gRPC / protobuf 的线上调试工具。两条路径:没有 proto 时按线格式启发式还原字段树;有 proto 时用动态反射做严格的结构化序列化与反序列化。
从任务开始
你手里有 .proto Schema 吗?
两条解析路径
overview路径一 · 无 Schema 反序列化
直接粘贴抓包得到的 hex / base64 载荷。工具按 protobuf 线格式逐字段还原,并对每个字段给出一组候选解释:varint 同时展示 uint64 / int64 / zigzag / bool,length-delimited 同时尝试 string、嵌套消息与 packed 数组。
适用于:线上抓包、日志里的裸字节、丢失 proto 的历史数据。
路径二 · 有 Schema 序列化 / 反序列化
粘贴 .proto 源码,工具在内存中编译(无需 protoc),然后用反射完成字节 → 结构化字段 → JSON,以及 JSON → 字节两个方向。字段名、枚举名、嵌套消息、repeated / map / oneof 都会按 schema 还原。
适用于:接口联调、构造请求体、校验对端返回值。
protobuf 线类型速查
reference| 线类型 | 名称 | 可能的字段类型 |
|---|---|---|
| 0 | varint | int32 / int64 / uint32 / uint64 / sint32 / sint64 / bool / enum |
| 1 | 64-bit | fixed64 / sfixed64 / double |
| 2 | length-delimited | string / bytes / 嵌套消息 / packed 重复字段 |
| 3 | start group | group(已废弃,proto2 遗留) |
| 4 | end group | group 结束标记(已废弃) |
| 5 | 32-bit | fixed32 / sfixed32 / float |
gRPC 分帧格式
framing+---------------+-------------------------------+-------------------------------+ | 1 字节 | 4 字节(大端) | N 字节 | | 压缩标志 | 消息长度 | 消息载荷(protobuf) | | 0=identity | | | | 1=compressed | | | +---------------+-------------------------------+-------------------------------+
选择“按 gRPC 帧解析”时,工具会逐帧剥离这 5 字节前缀并分别解析载荷;压缩帧(标志位为 1)只提示不做解压。