通过winpcap API读取protobuf消息

时间:2016-10-11 19:35:17

标签: c++ protocol-buffers winpcap

我正在使用winpcap来捕获网络流量,我知道这个流量主要包括序列化协议缓冲区交换。如果我知道系统可能传输的所有类型的消息,我该如何检测流量中的消息?

1 个答案:

答案 0 :(得分:0)

这将有点困难,因为协议缓冲区不是自描述的,当您通读原始字节流时,没有简单的方法来确定一条消息何时结束而另一条消息何时开始。但是,如果您对线路格式有充分的了解,只需付出一些努力就可以恢复部分数据。

协议缓冲区wire format基本上由一系列键值对组成。每个键代表一个字段编号和导线类型(一起称为标签),该值是与该字段编号关联的实际数据。如果您知道要查找的消息,我将首先根据消息定义中的类型和字段编号搜索您希望看到的标记。您必须阅读上面链接中的文档,以了解如何计算标记并将其格式化为varint,然后搜索那些原始varint字节。一旦找到了似乎是标签的内容,就必须尝试从那里解析消息,对有关消息结束的位置做出有根据的猜测。