Saltar al contenido
AZ Tools

Decodificador de Protobuf (sin .proto)

Una carga protobuf no revela nada por sí sola. En el cable no viajan nombres de campo, solo números y tipos de wire, así que un cuerpo opaco de una llamada gRPC o de una captura de API es ilegible salvo que tengas el .proto que lo generó — y cuando depuras el servicio de otra persona, normalmente no lo tienes. Este decodificador lee el formato de wire directamente. Cada campo vuelve con su número, su tipo de wire y su valor, los mensajes anidados se expanden en su sitio y, donde la codificación es ambigua, lo dice en lugar de elegir por ti. Esa ambigüedad es real: un varint puede ser un entero sin signo, uno con signo en zigzag o un booleano, y un campo con longitud puede ser una cadena, un mensaje anidado, números repetidos packed o bytes en bruto. La herramienta muestra la lectura más probable y enumera las demás al lado. La detección de mensajes anidados no es una conjetura sobre el significado: una secuencia de bytes solo se ofrece como mensaje si se analiza limpiamente como tal, con cada clave un número de campo válido y cada longitud terminando exactamente al final. Todo ocurre en tu navegador; la carga no se sube.

Pega una carga protobuf en base64 o hex para decodificarla.

Cómo usar

  1. Pega la carga en base64 o hex: el formato se detecta y puedes forzarlo.
  2. Lee el árbol: cada línea es el número de campo, el tipo de wire y el valor.
  3. Fíjate en el texto gris con las otras lecturas posibles de un valor.
  4. Los mensajes anidados aparecen indentados bajo su campo padre.
  5. Suelta un archivo binario para decodificar un cuerpo capturado directamente.

Preguntas frecuentes

¿Por qué no hay nombres de campo?
Porque no se transmiten. Protobuf pone en el cable solo un número de campo y un tipo de wire; los nombres viven en el archivo .proto de ambos extremos. Eso es lo que hace compacta la codificación, y es la razón por la que un decodificador sin esquema puede mostrarte la forma de un mensaje pero no cómo se llaman sus campos.
¿Cómo sabe que un campo contiene un mensaje anidado?
Intenta analizar los bytes como tal y acepta el resultado solo si es totalmente consistente: cada clave un número de campo y un tipo de wire válidos, y cada longitud acabando justo donde acaba el búfer. Las cadenas cortas a veces pasan esa prueba por casualidad, así que cuando los bytes también son texto válido la herramienta indica que la lectura es ambigua.
¿Cuáles son las lecturas alternativas de un número?
Un varint puede ser un int32/int64/uint, un sint en zigzag o un bool. Un fixed64 puede ser un double, un fixed64 o un sfixed64. Nada en la carga los distingue, así que se muestra primero la lectura más común y las otras al lado.
¿Puede decodificar cuerpos gRPC?
Una trama gRPC añade un byte de compresión y cuatro de longitud antes de cada mensaje. Quita esos cinco bytes y el resto se decodifica aquí. Las tramas comprimidas hay que descomprimirlas primero.
¿Y los grupos?
Los grupos son los tipos de wire 3 y 4, obsoletos desde proto2, y casi nunca se ven. El decodificador señala la marca donde la encuentra en vez de adivinar el anidamiento.
¿Se sube mi carga?
No. Los bytes se decodifican en tu navegador y no se envía nada a ningún servidor.

Herramientas relacionadas