Как я могу декодировать перехваченные запросы / ответы gRPC, чтобы просмотреть отправленные / полученные сообщения protobuf в golang? - PullRequest
2 голосов
/ 05 мая 2019

Я перехватываю необработанные запросы / ответы gRPC, проходящие через сокет UNIX (сокет-контейнер, использующий cri-api , используя eBPF для выполнения перехвата), и я хочу выяснить, что отправляется/получено.У меня есть доступ к файлу .proto , используемому для создания интерфейса gRPC с помощью плагина gRPC , так что это можно сделать, но я не уверен, как начать, так как я неРазъедините соединение gRPC.

Как я могу сделать это на Голанге?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Как вы получаете необработанное сообщение и в каком сетевом слое, в каком формате?

0 голосов
/ 05 мая 2019
  1. Использовать базовую поддержку GRPC

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

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

Использовать промежуточное программное обеспечение GRPC

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

Простой и глупый способ
// 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
}
...