【问题标题】:Dump protocol-buffers data/response转储协议缓冲区数据/响应
【发布时间】:2012-09-08 16:01:31
【问题描述】:

是否可以在不了解用于写入该数据的类型的情况下转储(查看)以 PB 格式写入的数据?

我发现https://stackoverflow.com/a/10253515/883738

简而言之,在网络上,protobuf 被编码为 的 3 元组,其中键是分配给 .proto 模式中的字段的字段编号。类型是 之一。它包含足够的信息来解码 3 元组的值,即它告诉您该值有多长。

我的最终目标是为 Fiddler2 编写扩展程序,以查看以 PB 格式发送/接收的内容。

【问题讨论】:

    标签: c# protocol-buffers protobuf-net fiddler


    【解决方案1】:

    为此有一个wireshark工具,iirc。

    这里的问题是如果你不知道架构,protobuf 格式是不明确的:

    • fixed-32 可以是浮点数或有符号或无符号整数(32 位)
    • fixed-64 可以是双精度或有符号或无符号整数(64 位)
    • varint 可以是有符号或无符号整数、之字形整数或布尔值
    • 字符串可以是 utf-8 字符串、原语的打包数组、子消息或原始字节

    事实上,唯一明确的标记是开始/结束组,它们已被半弃用!

    所以:这是可行的,但您可能需要对同一数据进行多种解释

    您也可以只列出字段编号:二进制格式中没有成员名称

    【讨论】:

    • Wireshark 工具很棒,唯一的问题是它不能很好地与 HTTPS 配合使用。多重表示是个好主意。那么,是否可以使用您的库?
    • @Alex 哦,当然你可以很容易地使用 ProtoReader - 只是基本上循环 while reader.ReadFieldHeader()>0 但这不会(也不能)告诉你什么是浮动 vs有符号整数与无符号整数等。Utf-8 你可以尝试一下,看看它是否有效,但是......
    • 谢谢!还有一个问题。 PB数据可以从0开始吗?
    • @Alex 不,它不能;第一个标记是字段编号(左移并与线型组合);字段编号是严格正数:所以不,零开头是不合法的
    • @alex 我的电子邮件在我的个人资料页面上。在 protobuf 中,前导零字节在技术上是不合法的,但我听说有人在单个流上发送多条消息时使用它作为消息分隔符
    【解决方案2】:

    这里有一个 Fiddler PB 实现(没用过):https://github.com/SecurityInnovation/ProtoMiddler

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2021-12-19
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多