IMLC.ME

WireShark 如何捉包 gRPC 消息

自 WireShark 3.4.0, WireShark 提供了 gRPC 协议的支持。本文将简述如果捕获并分析 gRPC 协议消息。

事前准备

本文借用了 gRPC Quick start 的例子,gRPC 服务器监听在 50051 端口。

$ ./build/install/examples/bin/hello-world-server
INFO: Server started, listening on 50051
设置 proto 文件路径

依次打开 Preferences -> Protocols,选择 ProtoBuf 协议。

Preview

点击 "Protobuf search paths" 旁的 Edit 按钮。

在弹出的对话框中,添加 proto 文件所在的路径。记得勾选右边的 "Load all files" 选项。

Preview

捕获 gRPC 消息

回到主界面,此时已经可以开始捕获 gRPC 通信。

为了避免捕获无关流量,开始前,设定 Capture Filter 为 "tcp port 50051",50051 为 gRPC 服务端的地址。

Preview

随便触发一段流量。

Preview

分析 gRPC 消息

默认情况下,界面上显示的都是 TCP 数据包。依次点击菜单栏的 Analyze -> Decode As... (或者右击随便一行)。

Preview

把 50051 端口的 TCP 消息解码成 HTTP2 协议信息。

Preview

完成操作,回到主界面,可以看到 GRPC 消息被识别成功。

Preview

为了更专注于 GRPC 协议的分析,你可以设置 Display Filter 为 "grpc" ,筛选出 gRPC 协议。

Preview