获取从grpc客户端传输的二进制数据

问题描述 投票:0回答:2

我是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捕获Wireshark Screenshot的屏幕截图

以下是截图中突出显示的条目的详细信息。 Details

在这里需要帮助来理解wireshark,或者可以用来查看二进制数据的任何其他方法。

c++ server client-server wireshark grpc
2个回答
2
投票

grpc的整个想法是隐藏它。假设我们忽略了这一点,你知道你在做什么。

逆向工程练习的两个好起点是:

  • 从简单开始:编译一个发送整数的程序。明白它。闻闻它。然后编译一个发送字符串的程序。尝试几个值。一旦你了解它,通过解决了解谷歌如何发送你的结构的问题。
  • 使用已知数据并做一些小变化:如果你开始知道你正在发送的数据,知道什么505249 ...意味着更容易(例如,发送“Hello world”字符串;然后将其更改为“Hella world”;看看是什么编码嗅探的变化;也检查发送多次相同的数据产生相同的嗅探输出)。应用先前点:开始简单,首先是空字符串,然后是“”,然后是“a”,然后是“b”等,然后传递给复杂和更大的字符串。不要害怕开始简单。

2
投票

Wireshark使用该端口来确定如何解码通信,并且它不知道与50051相关的任何协议。因此您需要将其配置为将其视为HTTP。

右键单击一行,然后在上下文菜单中选择“解码为...”。

About to click "Decode As" in context menu

然后将“Current”设置为“HTTP”或“HTTP2”(HTTP通常会自动检测HTTP2)并点击“OK”。

After setting "HTTP" as the Content

然后应该解码HTTP / 2帧。如果使用最新版本的Wireshark,您可能还会看到解码的gRPC帧。

Decoding as HTTP/2

© www.soinside.com 2019 - 2024. All rights reserved.