我是gRPC框架的新手,并且已经在PC上创建了一个示例客户端服务器(请参考this)。
在我的客户端服务器应用程序中,我实现了 simple RPC
service NameStudent {
rpc GetRoll(RollNo) returns (Details) {}
}
客户发送 RollNo ,并接收他/她的详细信息,包括姓名,年龄,性别,父母姓名和滚动编号。
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)” ,并且客户端可以在“ localhost:50051”上发送胶卷编号并接收详细信息。
我想查看在客户端和服务器之间传输的实际二进制数据。我曾经尝试过使用Wireshark,但我不明白我在这里看到的内容。
在这里需要帮助来理解Wireshark,或者可以使用其他任何方式来查看二进制数据。
答案 0 :(得分:2)
Wireshark使用端口来确定如何解码通信,并且它不知道与50051相关的任何协议。因此,您需要对其进行配置以将其视为HTTP。
右键单击一行,然后在上下文菜单中选择“解码为...”。
然后将“当前”设置为“ HTTP”或“ HTTP2”(HTTP通常会自动检测HTTP2),然后单击“确定”。
然后应解码HTTP / 2帧。而且,如果使用最新版本的Wireshark,您可能还会看到gRPC帧已解码。
答案 1 :(得分:1)
grpc的整个想法就是隐藏这一点。假设我们忽略了这一点,而您知道自己在做什么。
反向工程师练习的两个很好的起点是:
从简单开始:编译一个发送整数的程序。理解。闻一下然后编译一个发送字符串的程序。尝试几个值。一旦您了解了它,就可以解决了解Google如何发送您的结构的问题。
使用已知数据并进行一些细微的变化:如果您开始知道要发送的数据,则知道505249 ...会更容易(例如,发送“ Hello world”字符串;然后将其更改为“海拉世界”;查看编码的嗅探有什么变化;还要检查几次发送相同数据会产生相同的嗅探输出)。应用优先点:从简单的字符串开始,然后是空字符串,然后是“”,然后是“ a”,然后是“ b”,依此类推,然后再传递给复杂且较大的字符串。不要害怕从简单开始。