部分业务会直接在APP上调用grpc接口,并非我们常见的HTT P系列接口。
一、Charles工具:
可以抓grpc接口,但是需要复杂繁琐的解析过程~~
以下是在Charles中抓取gRPC接口流量的步骤:
这部分转载来自我的好友:背着键盘的女侠
https://blog.csdn.net/qq_40297562/article/details/135938813
1.1 使用Charles抓取grpc接口步骤:
1、启用HTTP/2协议:
在Charles中,点击“Proxy” -> “HTTP/2”。
确保“Enable HTTP/2”选项已勾选。
2、配置SSL代理:
打开Charles,进入菜单栏的“Proxy” -> “SSL Proxying Settings”。
添加一个新的SSL代理位置,Port默认为443,host为*即可。
3、启用SSL代理:
在Charles中,点击“Proxy” -> “Enable SSL Proxying” -> “Enable SSL Proxying”。
确保你已经信任Charles的根证书。你可以在“Help” -> “SSL Proxying” -> “Install Charles Root Certificate”中找到并安装根证书。
4、重新启动Charles:
如果你在配置过程中有所更改,重新启动Charles以确保设置生效。
5、抓取gRPC流量:
在Charles中,你应该能够看到gRPC请求和响应的流量。
可以通过过滤器或搜索来找到与gRPC相关的请求。
6、确认你可以抓到请求:如下图看到context-type为grpc即可:
1.2 解析Charles的二进制数据:
1、通过grpcurl解析二进制数据的方法本次就不赘述,有兴趣的可以参考以下操作(笔者未实践请大家做参考,来源于chatgpt的回答):
使用 grpcurl 解析请求:
打开终端,执行以下命令来解析 gRPC 请求:
grpcurl -plaintext -import-path /path/to/protos -proto your_service.proto -format json example.com:50051 your_service/method_name < request_data.bin
替换 /path/to/protos 为你的 .proto 文件所在的路径。
替换 your_service.proto 为你的服务定义文件名。
替换 example.com:50051 为你的 gRPC 服务地址和端口。
替换 your_service/method_name 为实际的 gRPC 方法名。
request_data.bin 是保存的 gRPC 请求的二进制数据文件。
使用 grpcurl 解析响应:
同样,执行以下命令来解析 gRPC 响应:
grpcurl -plaintext -import-path /path/to/protos -proto your_service.proto -format json example.com:50051 your_service/method_name < response_data.bin
替换相应的参数,包括 /path/to/protos、your_service.proto、example.com:50051、your_service/method_name 和 response_data.bin。
通过上述步骤,你应该能够使用 grpcurl 解析 Charles 保存的 gRPC 二进制文件,并将其转换成 JSON 格式。确保路径、文件名和 gRPC 相关的信息是正确的。
2、通过charles中配置解析ProtoBuf格式
首先,需要做前置工作:把你的proto文件生成desc文件为了给charles配置规则用。
具体操作如下:
1.brew install protobuf执行成功后输入命令检查安装是否成功protoc --version,出现以下截图就是成功啦~
2.执行命令生成desc文件:protoc -I=/本地proto文件的路径/ --descriptor_set_out=/本地要生成desc文件的存储路径/xxx.desc /本地proto文件的路径/xxx.proto
执行后没有报错就是生成成功,到存储路径看到文件即可啦~
这边失败的情况有很多,比如笔者遇到的报错基本是proto文件中import的包都是远程的解析的时候读取不到(可以把包文件存在本地地址并修改import地址或者确认没有用到这个包就直接注释掉),大家遇到了按照报错解决就行~
3.配置charles的protocol setting:
选择抓到的grpc接口右键选择配置:
把刚才生成的desc文件导入匹配,自动会识别出type,选择对应的方法即可。
重新请求方法即可看到最新的解析信息啦~
二、mitmproxy:
mitmproxy不需要这么复杂的解析过程,直接抓取即可使用。
2.1 使用mitmproxy抓取grpc接口步骤:
1、安装:
下载解压后双击 bmitmproxy 文件即可打开程序,如果使用源码安装的话可以在控制台输入 bmitmproxy 启动程序。
常见问题:
在 macOS 可能提示软件来自未认证的开发者,可以通过右键→打开的方式授予权限。
2、配置:
- 连接移动设备:mitmproxy 会自动监听在 8888 端口,可以通过点击左侧的「Inspector」按钮进入 mitmproxy
的主界面。 - 将移动设备的代理地址设为当前电脑地址,默认端口为 8888,如果有多个 IP 地址的话以公司内网的地址为准。
- 被测设备上用浏览器打开 http://mitm.it,选择对应操作系统安装证书。
- 信任刚刚安装的证书。
- 更详细的证书的安装与信任可以参考 mitmproxy
的官方文档:https://docs.mitmproxy.org/stable/concepts-certificates/。
2.1 注意点分享:
1、安卓证书安装和信任:
IOS设备完全按照手册可以顺利使用,安卓设备需要注意的地方:
1、安装的证书需要安装ca证书类型;
2、如果不确定自己证书有没有安装成功,可以去信任的证书列表看用户tab下有没有mitmproxy。
1、mock配置:
mock请求响应的时候路径不用带上域名。
/XXXX 部分即可