получить двоичные данные, переданные от клиента grpc - PullRequest
0 голосов
/ 06 марта 2019

Я новичок в gRPC Framework и создал образец клиент-сервер на моем ПК (см. this ).

В моем клиент-серверном приложении я реализовал простой 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;
}

Фактические коды сервера и клиента являются адаптацией примера кода, объясненного здесь

Теперь мой сервер может прослушивать "0.0.0.0:50051(address:port)" и клиент может отправлять ролл № на "localhost: 50051" и получите детали.

Я хочу увидеть фактические двоичные данные , которые передаются между клиентом и сервером. Я пытался использовать Wireshark, но я не понимаю, что я вижу здесь.

Вот скриншот wireshark capture Wireshark Screenshot

А вот подробности выделенной записи на скриншоте выше. Details

Нужна помощь в понимании Wireshark здесь, или любой другой способ, который может быть использован для просмотра двоичных данных.

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Wireshark использует порт для определения способа декодирования связи и не знает ни одного протокола, связанного с 50051. Поэтому вам необходимо настроить его так, чтобы он воспринимал это как HTTP.

Щелкните правой кнопкой мыши строкуи выберите «Декодировать как ...» в контекстном меню.

About to click

Затем установите «Текущий» на «HTTP» или «HTTP2» (HTTPобычно автоматически определяет HTTP2) и нажимает «ОК».

After setting

Затем кадры HTTP / 2 должны быть декодированы.И если вы используете последнюю версию Wireshark, вы также можете увидеть декодированные кадры gRPC.

Decoding as HTTP/2

2 голосов
/ 06 марта 2019

Вся идея GRPC в том, чтобы скрыть это.Допустим, мы игнорируем это, и вы знаете, что делаете.

  • Посмотрите на https://en.wikipedia.org/wiki/Protocol_Buffers. gRPC использует буферы протокола для представления своих данных.Вы можете получить подсказку о данных, которые вы видите.

Две хорошие отправные точки для упражнения с реинженерами:

  • Начните с простого: скомпилируйтеПрограмма, которая отправляет целое число.Понимать это.Нюхай это.Затем скомпилируйте программу, которая отправляет строку.Попробуйте несколько значений.Как только вы это поймете, перейдите к решению проблемы понимания того, как Google отправляет вашу структуру.

  • Используйте известные данные и делайте небольшие вариации: узнать, что значит 505249 ... легче, если вы начнетезная данные, которые вы отправляете (например, отправьте строку «Hello world»; затем измените ее на «Hella world»; посмотрите, что изменяется в кодированном сниффе; также проверьте, что отправка несколько раз одних и тех же данных приводит к одному и тому же сниффину).Примените предыдущий пункт: начните с простой, сначала пустой строки, затем "", затем "a", затем "b" и т. Д., А затем переходите к сложным и более крупным строкам.Не бойтесь начать с простого.

...