首页 › Category Archives › protobuf

wireshark protobuf 插件

搞网络开发的时候,涉及到很多私有协议。方便是方便,不过抓包分析问题就麻烦了,wireshark是不可能会为我们自己的网络协议开发分析工具的,唯有自己开发协议分析插件。在私有协议方面,google protobuf是一个类似与IDL的语言,用于定义消息接口,并且支持很多语言,原生支持C++、Java和python,而且还有很多第三方的支持,基本上支持C、C#、object-c,AS3,PHP等.目前protobuf的解析并不是wireshark内置支持的,不排除以后的版本会支持。当前网络上有一个工程可以支持protobuf的解析(protobuf-wireshark),但是该插件原生支持的只有linux版本,而且还只支持UDP解析。经本人改造,已经可以支持windows,并且同时支持TCP和UDP解析。TCP时,需要在protobuf之上加上一个4字节的数据长度,用于支持后续的protobuf消息的大小。
继续阅读 »

protobuf-wireshark编译小结

一直使用protobuf作为网络开发的私有协议消息通信。但是抓包分析是个问题。幸好目前已经有了支持wireshark的protobuf插件。该插件是基于linux的代码编写的。

1. 首先要先搭建好wireshark编译环境,可以参考官方的wireshark编译环境配置,安装上面的配置基本上是无问题。
继续阅读 »

protobuf用Extensions定义消息方法

protobuf Extensions这个东西还真蛮有用的, 这里记录一下用Extensions定义方法。
继续阅读 »

protobuf 中的嵌套消息的使用

之前已经介绍了protobuf的简单的使用,不过还留下了一个问题,那就是之前主要介绍的都是对简单数据的赋值,简单数据直接采用set_xx()即可,但是如果不是简单变量而是自定义的复合类型变量,就没有简单的set函数调用了,下面看一个简单的例子。
继续阅读 »

protobuf 生成的C++代码详解

Packages


如果 .proto 文件中包含 package 定义,此文件的整个内容将被放置到对应的C++命名空间中。例如,假定 package 声明为:

此 .proto 文件中所有声明将都属于命名空间 foo::bar。
继续阅读 »

protobuf c++入门

1、在.proto文件中定义消息格式
2、使用protobuf编译器
3、使用c++ api来读写消息
0、为何使用protobuf?
1、原始内存数据结构,可以以二进制方式sent/saved.这种方式需要相同的内存布局和字节序。
2、以ad-hoc方式将数据项编码成一个简单字符串—-比如,将4个int类型编码成”12:3:-23:67″。这种方式简灵活。适用于简单数据。
3、将数据序列化为XML。这种方式很流行,因为xml可读性好,编码解码方便,性能也好。仅仅XML dom树比较复杂。

继续阅读 »

化繁为简–google protobuf

1.概述。

protobuf,作为网络通信时的消息载体,不仅效率高,而且还加快开发进度,减少BUG。
继续阅读 »

Google Protocol Buffer缺陷

之所以要列出protobuf的缺陷,就是为了在使用Protobuf的时候可以规避这些缺陷;没有一个工具是十全十美的,我们在使用工具的时候需要扬长避短,因此要对其优点和缺点都有所了解才可以设计出更好的软件系统!!!

继续阅读 »

我的Protobuf消息设计原则(续)–实践

1.首先为 聊天服务器(Chat)定义google protobuf的协议接口文件

接口主要遵循 Request、Response、Notification(Indication),Command(本文未出现)四大消息分类,并且使用Message顶层消息把Request、Response,Notification等包含起来;并定义一个MSG枚举值,用于表示具体的消息值(在google protobuf RPC过程中,其实 每个service方法就是一个Request和Response的应答对,只不过其消息值的编码是RPC自动分配的)
继续阅读 »

我的Protobuf消息设计原则

网络通信涉及到消息的定义,不管是使用二进制模式、xml、json等格式。消息都可以大体的分为 命令消息、请求消息、应答消息和指示消息4大消息类型。一般情况下每个消息还还有包含一个序列号和一个能够唯一区分类型类型的消息编号,编号可以使用字符串、整数或者枚举等。
继续阅读 »