Charles解析protobuf之初探

前言

在程序开发以及网络通讯传输过程当中最多见的数据格式就是JSON、XML,或者是一种压缩效率更高的数据格式——Google的ProtoBuf。ProtoBuf在传输过程当中是以二进制的格式传输的,测试抓包的时候若是须要查看请求或返回消息中携带的参数信息就须要对它进行解析。小编以前在Windows环境下使用公司童鞋开发的Fiddler插件能够完成解析工做,但小编在家办公使用的抓包工具是Mac上的Charles。对于不熟悉Charles的小编而言,如何借助Charles来解析并展现ProtoBuf中的内容就尤其重要。本文就介绍一下小编尝试的几种在Mac环境中将ProtoBuf数据流转换为能够直观观察的数据格式的方法。。浏览器

1
ProtoBuf简介

服务器

Protocol buffers是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通讯协议、数据存储等。微信

Protocol Buffers是一种灵活,高效,自动化机制的结构数据序列化方法-可类比XML,可是比XML更小(3~10倍)、更快(20~100倍)、更为简单。网络

你能够定义数据的结构,而后使用特殊生成的源代码轻松的在各类数据流中使用各类语言进行编写和读取结构数据。你甚至能够更新数据结构,而不破坏由旧数据结构编译的已部署程序。数据结构

app

2
Charles简介

less

Charles实际上是一款代理服务器,经过成为电脑或者浏览器的代理,而后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的,可以在Windows、Mac、Linux上使用,安装Charles的时候要先装好Java环境。Charles的具体安装方法就不在此详细展开了,可是Charles应该算是Mac上最好用的抓包工具了。下面详细介绍下使用Charles查看PB文件的方法。编辑器

工具

3
方法一:Charles的Rewrite功能

测试

经过阅读Charles关于ProtoBuf的官方文档能够得出当Content-Type的类型为application/x-protobuf时,经过Charles查看内容可使用两个新的HTTP正文内容查看器,Protobuf文本查看器和Protobuf结构化查看器。可是小编在测试过程当中发现咱们的请求的Content-type并非application/x-protobuf的,而是text/plain; charset=utf-8的,因此考虑使用Charles的Rewrite功能将Content-type修改替换一下。

正常看到的请求以下图所示:

打开Tools->Rewrite界面配置,新增配置以下:

其中规则的详细配置是:

配置完成以后再去请求就能够看到Content-Type以下图所示。

此时就能够在Contents中看到对应的ProtoBuf以及ProtoBuf Text内容了。

        须要注意的是使用这种方式查看到的都是ProtoBuf里的value内容,没有对应的key,因此可读性较差,下面介绍可读性更强的第二种方式。

4
方法二:Charles解析PB功能

1、生成ProtoBuf的.desc解析文件

protoc工具安装:若是想解析一个ProtoBuf数据流,就必需要有对应的.proto文件,Charles须要一个.proto文件转换的.desc文件才能完成后续的解析工做。首先须要在Mac上安装protoc工具:brew install protobuf。

执行protoc --version可以展现如下内容就表明protoc工具安装成功了。

单个proto文件生成.desc文件将proto_test.proto文件放到固定路径/xx/下,而后执行命令:protoc -I=/xx/ --descriptor_set_out=/xx/proto_test.desc /xx/proto_test.proto就能够在对应路径下生成proto_test.desc文件了。

多个proto文件生成.desc文件:多个proto文件对应生成一个desc文件命令:protoc -I=/x/xx/ --descriptor_set_out=/x/xx/test.desc /x/xx/a.proto /x/xx/b.proto。


2、解析ProtoBuf格式

PB文件未解析时的Request和Response内容以下,能够看到基本全是乱码,可读性极差,经过添加以前生成的.desc文件并配置解析规则就完成PB文件的解析工做,步骤以下:

View Request/Response As:在对应的请求上右键选择View Request(Response) As->Protocol Buffers。

添加.desc文件:进入Charles提供的解析ProtoBuf的配置界面后,可经过点击Open Descriptot Registry将本身的ProtoBuf描述性文件(.desc文件)注册进去。

Descriptor Registry有两个默认支持的desc描述文件,咱们可经过点击add添加本身须要的desc文件。

配置message type添加成功后,能够在Message type中搜索须要解析的消息体对应的ProtoBuf Message,并配置对应的payload encoding。

   设置成功后,能够经过ProtoBuf以及ProtoBuf Text两种方式查看PB数据,其中ProtoBuf Text能够看到二进制的消息体已经转换为能够直观查看的相似JSON的数据体了,到此为止简单的PB数据解析工做就告一段落了。


5
Charles的相关配置

Viewer Mappings功能View Request/Response As功能只能设置单一请求的request body或者response body的proto解析,但若是是批量请求的解析须要进行大量的重复性工做,比较繁琐,具备较差的便利性,此时可经过Viewer Mappings功能解决该问题。

Protobuf Settings功能desc文件的添加不只能够经过Viewer Mappings功能和View Request/Response As功能,还能够经过菜单栏上的Protobuf Settings功能进行设置。

好啦,上述内容就是小编关于Charles查看PB数据格式请求的初探索,谢谢各位童鞋的阅读~

◆  ◆  ◆  ◆  ◆ 

本期编辑 / sufflower


本文分享自微信公众号 - 搜狗测试(SogouQA)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索