Протокол дампа-буферы данных / ответа
Можно ли сбрасывать (просматривать) данные, записанные в формате PB, без каких-либо знаний о типах, используемых для записи этих данных?
Я нашел https://stackoverflow.com/a/10253515/883738 что
Коротко говоря, на проводе протобуфы кодируются как 3-кортежи , где ключом является номер поля, присвоенный полю в поле .схема прото. Тип один из них . Он содержит ровно столько информации, чтобы расшифровать значение 3-кортежа, а именно он сообщает вам, как долго значение является.
Моя конечная цель-написать расширение для Fiddler2, чтобы увидеть, что отправляется/принимается в формате PB.
2 ответа:
Для этого есть инструмент wireshark, iirc.
Проблема здесь в том, что формат protobuf неоднозначен, если вы не знаете схему:
- фиксированный-32 может быть плавающей точкой или целым числом со знаком или без знака (32 бита)
- фиксированный-64 может быть двойным или знаковым или беззнаковым целым числом (64 бит)
Варинт может быть целым числом со знаком или без знака, целым числом зигзага или булевым числом- строка может быть строкой utf-8, упакованным массивом примитивов, вложенным сообщением или необработанные байты
На самом деле, единственными однозначными маркерами являются start/end group, и они являются полу-устаревшими!
Итак: это в некотором роде выполнимо, но вам может потребоваться представить несколько интерпретаций одних и тех же данных
Вы также можете перечислить только номера полей: в двоичном формате нет имен членов
Здесь есть реализация Fiddler PB (не использовал ее): https://github.com/SecurityInnovation/ProtoMiddler