如何解码被拦截的gRPC请求/响应,以查看golang中已发送/已接收的protobuf消息?

时间:2019-05-04 22:39:23

标签: go protocol-buffers grpc grpc-go

我正在拦截UNIX套接字上的原始gRPC请求/响应(使用cri-api的容器化套接字,使用eBPF来执行拦截),我想弄清楚正在发送/接收的内容。我可以访问用于使用.proto生成gRPC接口的gRPC plugin文件,因此应该可以这样做,但是由于我不属于gRPC连接,因此我不确定如何启动。 / p>

如何在golang中进行此操作?

2 个答案:

答案 0 :(得分:0)

您如何获取原始消息以及在哪个网络层中以哪种格式显示?

答案 1 :(得分:-1)

  1. 使用GRPC基本支持

https://godoc.org/google.golang.org/grpc#StreamInterceptor

https://godoc.org/google.golang.org/grpc#UnaryInterceptor

  1. 使用GRPC中间件

https://github.com/grpc-ecosystem/go-grpc-middleware

  1. 简单而愚蠢的方式
// GRPC handler
func (x *M) GRPCHanler(ctx context.Context, req *REQ) (rsp *RSP, eRR error) {
    rsp = new(RSP)
    method = "GRPCHanler"
    log.Infof("GRPC-%s Request:%+v", method, req)
    defer func() {
        log.Infof("GRPC-%s Response:%+v", method, rsp)
        if eRR != nil {
            log.Errorf("GRPC-%s Error:%v", method,eRR)
        }
        // eRR = nil
    }
    // handler
}