Протокол дампа-буферы данных / ответа


Можно ли сбрасывать (просматривать) данные, записанные в формате PB, без каких-либо знаний о типах, используемых для записи этих данных?

Я нашел https://stackoverflow.com/a/10253515/883738 что

Коротко говоря, на проводе протобуфы кодируются как 3-кортежи , где ключом является номер поля, присвоенный полю в поле .схема прото. Тип один из них . Он содержит ровно столько информации, чтобы расшифровать значение 3-кортежа, а именно он сообщает вам, как долго значение является.

Моя конечная цель-написать расширение для Fiddler2, чтобы увидеть, что отправляется/принимается в формате PB.

2 6

2 ответа:

Для этого есть инструмент wireshark, iirc.

Проблема здесь в том, что формат protobuf неоднозначен, если вы не знаете схему:

  • фиксированный-32 может быть плавающей точкой или целым числом со знаком или без знака (32 бита)
  • фиксированный-64 может быть двойным или знаковым или беззнаковым целым числом (64 бит)
  • Варинт может быть целым числом со знаком или без знака, целым числом зигзага или булевым числом
  • строка может быть строкой utf-8, упакованным массивом примитивов, вложенным сообщением или необработанные байты

На самом деле, единственными однозначными маркерами являются start/end group, и они являются полу-устаревшими!

Итак: это в некотором роде выполнимо, но вам может потребоваться представить несколько интерпретаций одних и тех же данных

Вы также можете перечислить только номера полей: в двоичном формате нет имен членов

Здесь есть реализация Fiddler PB (не использовал ее): https://github.com/SecurityInnovation/ProtoMiddler