获取从 grpc 客户端传输的二进制数据
get the binary data transferred from grpc client
我是gRPC框架的新手,我已经在我的PC上创建了一个示例client-server(参考this)。
在我的 client-server 应用程序中,我实现了 simple RPC
service NameStudent {
rpc GetRoll(RollNo) returns (Details) {}
}
客户端发送 RollNo 并接收 his/her 详细信息,其中包括 姓名、年龄、性别、parent 姓名,卷号
message RollNo{
int32 roll = 1;
}
message Details {
string name = 1;
string gender = 2;
int32 age = 3;
string parent = 4;
RollNo rollid = 5;
}
实际的服务器和客户端代码是对示例代码解释的改编here
现在我的服务器可以监听 "0.0.0.0:50051(address:port)" 并且客户端可以在 上发送 roll no "localhost:50051" 并接收详细信息。
我想查看在客户端和服务器之间传输的实际二进制数据。我试过使用 Wireshark,但我不明白我在这里看到的是什么。
这里是wireshark抓包的截图
下面是上面屏幕截图中突出显示的条目的详细信息。
需要帮助了解 wireshark 或任何其他可用于查看二进制数据的方式。
grpc 的整个想法就是隐藏它。假设我们忽略了这一点,你知道自己在做什么。
- 看https://en.wikipedia.org/wiki/Protocol_Buffers。 gRPC 使用 Protocol Buffers 作为它的数据表示。您可能会从所看到的数据中得到提示。
逆向工程练习的两个很好的起点是:
从简单开始:编译一个发送整数的程序。明白它。闻一闻。然后编译一个发送字符串的程序。尝试几个值。一旦你理解了它,通过解决理解google如何发送你的结构的问题。
使用已知数据并做一些小改动:如果您开始了解要发送的数据(例如,发送 "Hello world" 字符串;然后将其更改为 "Hella world";查看编码的嗅探有何变化;还要检查多次发送相同的数据是否会产生相同的嗅探输出)。应用先验点:从简单开始,首先是空字符串,然后是“”,然后是 "a",然后是 "b",等等,然后传递给复杂的更大的字符串。不要害怕从简单开始。
Wireshark 使用该端口来确定如何解码通信,它不知道与 50051 关联的任何协议。因此您需要将其配置为将其视为 HTTP。
右键单击一行,然后在上下文菜单中 select "Decode As..."。
然后将 "Current" 设置为 "HTTP" 或 "HTTP2"(HTTP 通常会自动检测 HTTP2)并点击 "OK"。
然后 HTTP/2 帧应该被解码。如果使用最新版本的 Wireshark,您可能还会看到解码的 gRPC 帧。
我是gRPC框架的新手,我已经在我的PC上创建了一个示例client-server(参考this)。
在我的 client-server 应用程序中,我实现了 simple RPC
service NameStudent {
rpc GetRoll(RollNo) returns (Details) {}
}
客户端发送 RollNo 并接收 his/her 详细信息,其中包括 姓名、年龄、性别、parent 姓名,卷号
message RollNo{
int32 roll = 1;
}
message Details {
string name = 1;
string gender = 2;
int32 age = 3;
string parent = 4;
RollNo rollid = 5;
}
实际的服务器和客户端代码是对示例代码解释的改编here
现在我的服务器可以监听 "0.0.0.0:50051(address:port)" 并且客户端可以在 上发送 roll no "localhost:50051" 并接收详细信息。
我想查看在客户端和服务器之间传输的实际二进制数据。我试过使用 Wireshark,但我不明白我在这里看到的是什么。
这里是wireshark抓包的截图
下面是上面屏幕截图中突出显示的条目的详细信息。
需要帮助了解 wireshark 或任何其他可用于查看二进制数据的方式。
grpc 的整个想法就是隐藏它。假设我们忽略了这一点,你知道自己在做什么。
- 看https://en.wikipedia.org/wiki/Protocol_Buffers。 gRPC 使用 Protocol Buffers 作为它的数据表示。您可能会从所看到的数据中得到提示。
逆向工程练习的两个很好的起点是:
从简单开始:编译一个发送整数的程序。明白它。闻一闻。然后编译一个发送字符串的程序。尝试几个值。一旦你理解了它,通过解决理解google如何发送你的结构的问题。
使用已知数据并做一些小改动:如果您开始了解要发送的数据(例如,发送 "Hello world" 字符串;然后将其更改为 "Hella world";查看编码的嗅探有何变化;还要检查多次发送相同的数据是否会产生相同的嗅探输出)。应用先验点:从简单开始,首先是空字符串,然后是“”,然后是 "a",然后是 "b",等等,然后传递给复杂的更大的字符串。不要害怕从简单开始。
Wireshark 使用该端口来确定如何解码通信,它不知道与 50051 关联的任何协议。因此您需要将其配置为将其视为 HTTP。
右键单击一行,然后在上下文菜单中 select "Decode As..."。
然后将 "Current" 设置为 "HTTP" 或 "HTTP2"(HTTP 通常会自动检测 HTTP2)并点击 "OK"。
然后 HTTP/2 帧应该被解码。如果使用最新版本的 Wireshark,您可能还会看到解码的 gRPC 帧。