总结:可以抓grpc接口,但是需要复杂繁琐的解析过程,建议还是使用mitmproxy等其他工具~~
一、怎么在charles上看到gRPC接口请求呢?
以下是在Charles中抓取gRPC接口流量的步骤:
- 启用HTTP/2协议:
- 在Charles中,点击“Proxy” -> “HTTP/2”。
- 确保“Enable HTTP/2”选项已勾选。
- 配置SSL代理:
- 打开Charles,进入菜单栏的“Proxy” -> “SSL Proxying Settings”。
- 添加一个新的SSL代理位置,Port默认为443,host为*即可。
- 启用SSL代理:
- 在Charles中,点击“Proxy” -> “Enable SSL Proxying” -> “Enable SSL Proxying”。
- 确保你已经信任Charles的根证书。你可以在“Help” -> “SSL Proxying” -> “Install Charles Root Certificate”中找到并安装根证书。
- 重新启动Charles:
- 如果你在配置过程中有所更改,重新启动Charles以确保设置生效。
- 抓取gRPC流量:
- 在Charles中,你应该能够看到gRPC请求和响应的流量。
- 可以通过过滤器或搜索来找到与gRPC相关的请求。
- 确认你可以抓到请求:如下图看到context-type为grpc即可
二、怎么解析gRpc中的二进制数据呢?
请注意,抓取gRPC流量可能会涉及到gRPC的自定义内容,Charles可能不会直观地解析gRPC消息,上图可以看到PB文件没解析的时候都是一堆乱码。那么怎么解析呢?以下介绍一下解析这类二进制数据的方法:
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,选择对应的方法即可。
重新请求方法即可看到最新的解析信息啦~
本文方法仅供参考,有更多好用的工具/方法欢迎大家评论讨论哦~~