본문으로 건너뛰기

Protobuf 디코더

Protobuf Decoder

.proto 파일 없이 protobuf 데이터를 해독해 필드 번호·와이어 타입·중첩 구조를 추론합니다.

`.proto` 파일 없이 protobuf 페이로드를 해독합니다. 와이어 포맷 — 필드 번호, 와이어 타입, 중첩 — 을 읽고, 값마다 가능한 해석을 나란히 보여 줍니다. 스키마가 없으면 해석이 정말로 하나가 아니기 때문입니다.

🔒 브라우저 안에서만 처리protobufdecodebinarygrpc

페이로드

바이너리 페이로드 놓기

이 탭에서 해독합니다. 올라가지 않습니다.

필드

최상위 필드

3

전체 크기

17byte

  • #1VARINT@0, 3 Buint 150 · zigzag 75
  • #2LEN@3, 9 B"testing"
  • #3LEN@12, 5 B메시지 (필드 1개)
    • #1VARINT@0, 3 Buint 150 · zigzag 75

JSON으로 보기 (이름 자리에 필드 번호)

.proto 파일이 없으면 필드 이름을 알 수 없고, 같은 페이로드가 여러 방식으로 유효하게 읽힙니다. 그래서 varint는 부호 없는 값·부호 있는 값·지그재그를 한꺼번에 보여 주고, 길이가 붙은 필드는 메시지·텍스트·바이트로 함께 보여 줍니다. 화면의 중첩 구조는 모든 바이트가 정확히 맞아떨어지는 해석이고, 다른 해석은 숨기지 않고 옆에 적어 둡니다.

사용 방법

  1. 바이트를 붙여넣거나 파일을 놓습니다

    공백이 있든 없든 16진수, 또는 Base64를 받습니다. 대신 32MB까지의 바이너리 파일을 놓아도 됩니다.

  2. 필드 목록을 읽습니다

    줄마다 필드 번호, 와이어 타입, 바이트 오프셋과 길이, 그리고 해석들이 나옵니다. 중첩된 메시지는 부모 아래에 들여써서 보여 줍니다.

  3. JSON 투영을 가져갑니다

    같은 트리를 JSON으로 낸 것입니다. 이름 자리에 필드 번호가 들어갑니다. 두 페이로드를 비교하거나 이슈에 붙여넣을 때 씁니다.

자주 묻는 질문

필드 이름이 왜 없나요?

protobuf가 이름을 전선에 실어 보내지 않기 때문입니다. 인코딩된 메시지에는 필드 *번호*만 들어 있고 이름은 `.proto` 파일에 있습니다. 그래서 형식이 작고, 그래서 스키마 없는 해독은 번호까지만 보여 줄 수 있습니다.

한 값이 왜 세 가지로 나오나요?

전선 위의 varint는 그냥 비트이기 때문입니다. 같은 바이트가 유효한 `uint64`이고, 유효한 `int64`이고, 유효한 지그재그 `sint64`입니다. 어느 쪽인지는 스키마만 압니다. 하나만 보여 주고 나머지를 감추면 짐작을 사실인 양 내놓는 셈입니다.

중첩 메시지인지 어떻게 판단하나요?

길이가 붙은 필드는 메시지일 수도, 문자열일 수도, 그냥 바이트일 수도 있습니다. 내용이 완전히 파싱될 때 — 모든 바이트가 소비되고 남는 것이 없을 때 — 메시지로 보여 주고, 그 바이트가 출력 가능한 텍스트이기도 하면 문자열 해석을 옆에 함께 적습니다. 짧은 문자열이 우연히 메시지로 파싱되는 일이 가끔 있어서, 두 해석을 모두 두어 판단할 수 있게 했습니다.

gRPC 트래픽도 해독되나요?

메시지 본문은 됩니다. 앞의 5바이트짜리 gRPC 프레임 헤더 — 압축 플래그 1바이트와 빅엔디언 길이 4바이트 — 를 떼어 낸 뒤에 넣으면 됩니다. 그 뒤의 바이트를 주면 평소처럼 해독합니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.