charles上怎么抓gRPC接口

总结:可以抓grpc接口,但是需要复杂繁琐的解析过程,建议还是使用mitmproxy等其他工具~~

一、怎么在charles上看到gRPC接口请求呢?

以下是在Charles中抓取gRPC接口流量的步骤:

  1. 启用HTTP/2协议:
    1. 在Charles中,点击“Proxy” -> “HTTP/2”。
    2. 确保“Enable HTTP/2”选项已勾选。
  2. 配置SSL代理:
    1. 打开Charles,进入菜单栏的“Proxy” -> “SSL Proxying Settings”。
    2. 添加一个新的SSL代理位置,Port默认为443,host为*即可。
  3. 启用SSL代理:
    1. 在Charles中,点击“Proxy” -> “Enable SSL Proxying” -> “Enable SSL Proxying”。
    2. 确保你已经信任Charles的根证书。你可以在“Help” -> “SSL Proxying” -> “Install Charles Root Certificate”中找到并安装根证书。
  4. 重新启动Charles:
    1. 如果你在配置过程中有所更改,重新启动Charles以确保设置生效。
  5. 抓取gRPC流量:
    1. 在Charles中,你应该能够看到gRPC请求和响应的流量。
    2. 可以通过过滤器或搜索来找到与gRPC相关的请求。
  6. 确认你可以抓到请求:如下图看到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,选择对应的方法即可。

重新请求方法即可看到最新的解析信息啦~

本文方法仅供参考,有更多好用的工具/方法欢迎大家评论讨论哦~~

相关推荐

  1. Charles

    2024-02-01 22:44:02       19 阅读
  2. Linux捕获网络接口的网络流量(包)

    2024-02-01 22:44:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 22:44:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 22:44:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 22:44:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 22:44:02       18 阅读

热门阅读

  1. SQL语言(三)

    2024-02-01 22:44:02       30 阅读
  2. 对比上次MySQL的DDL

    2024-02-01 22:44:02       33 阅读
  3. 9.SELinux

    9.SELinux

    2024-02-01 22:44:02      20 阅读
  4. explicitCharkey是什么

    2024-02-01 22:44:02       38 阅读
  5. L1-017 到底有多二分数 15

    2024-02-01 22:44:02       32 阅读
  6. Linux 下多线程理解

    2024-02-01 22:44:02       30 阅读