【问题标题】:How to verify protobuf encoding is used in gRPC?如何验证 gRPC 中使用了 protobuf 编码?
【发布时间】:2022-12-15 06:28:28
【问题描述】:

我正在使用 gRPC 来传输遥测数据。测试团队想检查 gRPC 是否使用了 protobuf 编码?谁能帮我验证一下?

有没有办法使用 Wireshark 捕获发送数据包并验证是否使用了 protobuf 编码?

尝试在线搜索但没有得到任何有用的结果。

【问题讨论】:

  • 请更具体地分享您的情况。测试组做什么的?
  • 你想检查编码数据是否被 protobuf 包装?
  • 是的。我该如何验证?
  • 测试团队想要验证是否在底层使用了 protobuf 编码。

标签: c++ protocol-buffers grpc


【解决方案1】:

有几种可能的方法可以继续。

无聊 - 查看文档

首先是查阅文档。看一眼here 就是很好的确认。

虽然了解这里有多层网络堆栈很重要 - gRPC 使用 Protobuf 对使用 http/2 在网络上传输的应用程序消息进行编码,而这些消息又可以配置为使用 TLS 加密,所有这些最终都会被发送通过 tcp 会话。

所以,是的,gRPC 确实使用了 Protobuf,但这还没有结束(还有 http/2,可能还有 TLS)。测试团队可能需要完全理解所有这些。

查看源代码

源代码似乎都是开源的,可以仔细检查一下。

更有趣的方式

第三,无论文档是否足以回答您的问题,我都建议您这样做,这是使用 Wireshark 的更有趣的方式!

Wireshark 可以轻松扩展。基本上,WireShark 可以取消 gRPC 一直到原始消息本身(除非您已打开 gRPC 中的任何安全功能,在这种情况下,Wireshark 会因不知道加密密钥而受阻)。 Wireshark 可以做到这一点,因为它看起来像 gRPC 使用 http/2,这是一个已定义的协议,但不知道如何解码使用 http/2 传输的消息。

您可以做的是使用您的 .proto 文件来帮助为 Wireshark 生成解析器插件,以便可以在 Wireshark 中解码各个消息。参见herehere

好的,所以这需要一些工作来实现,但它是值得的,尤其是在“测试”很重要的情况下。这意味着 Wireshark,尤其是 PCAP 文件,可以是遥测流的权威记录,独立于遥测链路两端的软件。另外,它是一个带有正确时间戳的记录,这可能也很重要。

如果出现任何问题,您还拥有一个非常强大的诊断工具。例如。如果遥测数据看起来不正确,问题出在哪里?拥有可用于检查 gPRC 数据一直到消息内容的 Wireshark 插件是一个有用的工具。

Wireshark PCAP 文件和剖析也是查看同时发生的任何其他事情的好方法。

我以前做过这个,尽管我使用的是 ASN.1 并为 Wireshark 创建了一个系统特定的 ASN.1 解析器。 Wireshark 的这种用法非常酷。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 2017-09-03
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2017-02-22
    • 2018-06-28
    • 2019-03-08
    相关资源
    最近更新 更多