【问题标题】:How to parse protobuf packets in Wireshark如何在 Wireshark 中解析 protobuf 数据包
【发布时间】:2017-07-12 16:54:14
【问题描述】:

我的目标是拥有一个可以解析基于 protobuf (UDP) 的协议的插件/解析器。
我在网上找到了用于协议缓冲区消息的自动生成 Wireshark/Ethereal 解析器插件:https://code.google.com/archive/p/protobuf-wireshark/
当我关注ReadMe 文件时,我跳过了“第 1 步:从源代码安装 Wireshark”,因为我已经安装了它(版本 1.12.3)。

第 2 步:准备协议缓冲区 -

这一步我不明白,我如何安装 libprotobuf 和 在哪里?

第三步:更新wireshark配置文件 -

我不确定什么是“wireshark_src_dir”

我创建了一个 wireshark.conf 文件:
wireshark_src_dir:C:\Program Files (x86)\Wireshark
wireshark_install_dir:C:\Program文件 (x86)\Wireshark
wireshark_version:1.12.3

第 4 步:运行 make_wireshark_plugin.py - 对于该步骤,我下载并安装了 python-3.6.0-amd64.exe。

当我运行它时,我收到一个错误:Traceback(最近的调用 最后):文件“C:\ProtoBuff\protobuff\make_wireshark_plugin.py”,行 91,在 f=open("configure.in","r") FileNotFoundError: [Errno 2] 没有这样的文件或目录:'configure.in'。

这个文件在我下载的包中确实不存在 github。我从哪里得到这个文件?我需要创建这样的吗?什么是 这个 make_wireshark_plugin.py 生成?

第 5 步:创建 proto 配置文件 - 所有 proto 配置文件都需要在 /usr/share/wireshark/protobuf 或 $HOME/.wireshark/protobuf。

wireshark 中没有共享文件夹和 protobuf 文件夹 安装路径。我可以简单地将原型配置文件放入 插件文件夹?

【问题讨论】:

  • 可能libprotobuf是一个包:$ apt list libprotobuf*
  • 假设 libprotobuf 是一个包。我在哪里得到它?如何安装?
  • 是的,我是 Windows 用户

标签: python lua wireshark lua-table tshark


【解决方案1】:

关于 Protobuf 和 gRPC 解析器的新功能已添加到 Wireshark 3.2.0 版中:

  • 现在可以配置 Protobuf 文件 (*.proto) 以更精确地解析序列化的 Protobuf 数据(例如 gRPC)。
  • 现在可以解析流式 gRPC 方法的消息,支持 HTTP2 流式模式重组功能。
  • 用户可以在 Protobuf 协议首选项中指定 protobuf 搜索路径(其中有 *.proto 文件)和 protobuf 消息类型映射的 UDP 端口。
  • 如果您自己的解析器需要调用protobuf解析器,您可以通过数据参数(在C中)或pinfo->private_table[“pb_msg_type”](在lua中为pinfo.private[“pb_msg_type”])将消息类型传递给Protobuf解析器.

另外两个新功能将在 3.3.0 或 3.4.0 中发布:

  • Protobuf 字段可以分解为 wireshark(标题)字段,允许用户在过滤器工具栏中输入 Protobuf 字段或消息的全名进行搜索。
  • 基于 Protobuf 的解析器可以将自身注册到新的“protobuf_field”解析器表中,该表以字段的全名作为键,用于进一步解析 BYETS 或 STRING 类型的字段。

参考资料:

【讨论】:

    【解决方案2】:

    您可以改用这个,它不需要编译任何东西:https://github.com/128technology/protobuf_dissector

    【讨论】:

    • 我的协议结构是:(1)4字节(2)4字节(3)protobuf。如何使您提供的插件与我的 structre 一起使用?我可以先把 8 个字节打成药丸,然后再使用插件吗? (我不在乎 8 个字节,它是遗留的......)
    • 请参考最后一条评论@hadriel
    • 是的,你应该能够跳过前 8 个字节 - protobuf 解析器假定(从一开始)给它的 TVB 是一个 protobuf 消息,所以只要你跳过这 8 个字节字节你应该很好。
    • 考虑当前的限制:不支持选项“message_set_wire_format=true”,不支持选项“packed=true”,不支持'import'语句'弱'模式等
    • 你不应该使用“message_set_wire_format=true”,因为那是旧的内部谷歌格式。 “导入弱”是有争议的,因为使用wireshark文件的全部目的是解码它们,所以丢失文件是没有意义的。 “packed=true”绝对是一个缺失的选项,应该在解剖器中实现。只是当时没用。
    猜你喜欢
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 2021-12-08
    • 2018-08-23
    • 2014-06-26
    • 1970-01-01
    • 2016-04-19
    • 2021-12-14
    相关资源
    最近更新 更多