簡體   English   中英

獲取從grpc客戶端傳輸的二進制數據

[英]get the binary data transferred from grpc client

我是gRPC框架的新手,並且已經在PC上創建了一個示例客戶端服務器(請參閱this )。

在我的客戶端服務器應用程序中,我實現了一個簡單的RPC

service NameStudent {
  rpc GetRoll(RollNo) returns (Details) {}
}

客戶發送RollNo並接收他/她的詳細信息,包括姓名,年齡,性別,父母姓名RollNo

message RollNo{
    int32 roll = 1;
}

message Details {
    string name = 1;
    string gender = 2;
    int32 age = 3;
    string parent = 4;
    RollNo rollid = 5;
}

實際的服務器和客戶端代碼是此處解釋的示例代碼的改編

現在,我的服務器可以偵聽“ 0.0.0.0:50051(address:port)”,並且客戶端可以在“ localhost:50051”上發送滾動號並接收詳細信息。

我想查看在客戶端和服務器之間傳輸的實際二進制數據 我嘗試使用Wireshark,但我不明白我在這里看到的內容。

這是wireshark捕獲的屏幕截圖 Wireshark屏幕截圖

這是上面屏幕截圖中突出顯示的條目的詳細信息。 細節

在這里需要幫助以了解Wireshark,或者可以使用其他任何方式查看二進制數據。

grpc的整個想法就是隱藏這一點。 假設我們忽略了這一點,而您知道自己在做什么。

反向工程師練習的兩個良好起點是:

  • 從簡單開始:編譯一個發送整數的程序。 理解。 聞一下 然后編譯一個發送字符串的程序。 嘗試幾個值。 一旦您了解了它,就可以解決了解Google如何發送您的結構的問題。

  • 使用已知數據並進行一些細微的變化:如果您開始知道要發送的數據,則知道505249 ...的含義會更容易(例如,發送“ Hello world”字符串;然后將其更改為“ Hella world”;看看是什么)更改已編碼的嗅探;還檢查發送幾次相同的數據會產生相同的嗅探輸出)。 應用優先點:從簡單的字符串開始,然后是空字符串,然后是“”,然后是“ a”,然后是“ b”,依此類推,然后再傳遞給復雜且較大的字符串。 不要害怕從簡單開始。

Wireshark使用該端口來確定如何解碼通信,並且它不知道與50051相關的任何協議。因此,您需要對其進行配置以將其視為HTTP。

右鍵單擊一行,然后在上下文菜單中選擇“解碼為...”。

要在上下文菜單中單擊“解碼為”

然后將“當前”設置為“ HTTP”或“ HTTP2”(HTTP通常會自動檢測HTTP2)並單擊“確定”。

將“ HTTP”設置為內容后

然后應該對HTTP / 2幀進行解碼。 而且,如果使用的是Wireshark的最新版本,您可能還會看到gRPC幀已解碼。

解碼為HTTP / 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM