Расшифровать двоичный файл protobuf - получить сообщение «Не удалось проанализировать ввод» - PullRequest
0 голосов
/ 28 сентября 2018

Я попытался декодировать двоичное сообщение protobuf, используя protoc, и получаю сообщение об ошибке " Failed to parse input ".Я пробовал оба protoc --decode_raw < proto.bin и protoc --decode package.MessageType MySchema.proto < proto.bin.

Я прочитал два потока в SO, один из которых говорит о том, что protoc --decode не является надежным на 100%, а другой - о том, что данные о длине сообщения в начале должны быть удалены вручную.У меня вопрос

  • Как использовать protoc инструмент для декодирования прото-файлов?
  • Правда ли, что инструмент не на 100% надежен для декодирования (даже если яТип поставки) или сообщения должны быть взломаны, прежде чем они могут быть десериализованы?(напрашивается вопрос, какова цель опции protoc --decode?

PS: я использую protoc 3.6.1, и сообщения создаются в программе Java (синтаксис = proto2)

1 Ответ

0 голосов
/ 28 сентября 2018

Это помогло бы, если бы вы связали потоки, о которых вы говорите.

Но в общем, да, вам нужно удалить префикс длины перед декодированием с помощью protoc.Не существует стандарта о том, как префиксировать длину к сообщениям protobuf, некоторые используют префикс fixed32, а другие varint, некоторые имеют более длинный заголовок.Таким образом, инструмент protoc не может разобрать заголовок длины.

И я не видел ни одного случая, когда protoc --decode не декодировал бы действительное сообщение.Но он очень мало допускает ошибки, такие как усеченные данные - он всегда отклоняет все сообщение, даже если повреждено только одно поле.

Для лучшей отладки вы можете использовать, например, этот инструмент, который декодирует побайтовои показывает первую ошибку, которая возникает: https://protogen.marcgravell.com/decode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...