2012-09-08 18 views
6

Có thể đổ dữ liệu (xem) được ghi bằng định dạng PB mà không biết bất kỳ loại nào được sử dụng để ghi dữ liệu đó không?Dữ liệu/bộ đệm đệm giao thức Dump

tôi đã tìm thấy https://stackoverflow.com/a/10253515/883738 rằng

Tóm lại, trên dây, protobufs được mã hóa như 3-tuples của, nơi quan trọng là số lĩnh vực được phân công lĩnh vực này trong lược đồ .proto. Loại này là một trong. Nó chỉ chứa đủ thông tin để giải mã giá trị của 3-tuple, cụ thể là nó cho bạn biết giá trị của nó là bao lâu.

Mục tiêu cuối cùng của tôi là viết phần mở rộng cho Fiddler2 để xem những gì đang được gửi/nhận ở định dạng PB.

Trả lời

6

Có một công cụ wireshark cho điều này, iirc.

Vấn đề ở đây là các định dạng protobuf là mơ hồ nếu bạn không biết schema:

  • cố định-32 có thể là một phao hoặc một số nguyên ký kết hoặc unsigned (32 bit)
  • số 64 cố định có thể là số nguyên hoặc số không dấu (64 bit)
  • có thể là số nguyên đã ký hoặc không dấu, số nguyên zig-zag hoặc boolean
  • một chuỗi có thể là utf- 8 chuỗi, một chuỗi các tệp nguyên thủy được đóng gói, một thư phụ hoặc byte thô

Trên thực tế, các mã thông báo rõ ràng duy nhất là nhóm bắt đầu/kết thúc và chúng không được chấp nhận!

Vì vậy: nó là loại doable, nhưng bạn có thể cần phải giới thiệu nhiều nét giải thích của cùng một dữ liệu

Bạn cũng có thể chỉ số lĩnh vực danh: không có thành viên tên theo định dạng nhị phân

+0

Công cụ Wireshark thật tuyệt vời, vấn đề duy nhất nó không hoạt động tốt với HTTPS. Nhiều biểu diễn là ý tưởng tuyệt vời. Vì vậy, có thể sử dụng thư viện của bạn không? –

+0

@ Alex oh, chắc chắn rằng bạn có thể sử dụng ProtoReader dễ dàng đủ - chỉ về cơ bản vòng lặp trong khi reader.ReadFieldHeader()> 0 nhưng điều đó sẽ không (và không thể) cho bạn biết liệu một cái gì đó là một phao vs int đã ký vs một unsigned int , vv Utf-8 bạn có thể có thể làm bằng cách thử nó và nhìn thấy nếu nó hoạt động, nhưng ... –

+0

Cảm ơn! Một câu hỏi nữa. Dữ liệu PB có thể bắt đầu bằng 0 không? –