Как я могу получить IP-адрес клиента и агента пользователя в Golang gRPC?

Я настроил серию запросов и ответов gRPC, и все они работают нормально, но я застрял, когда пытаюсь получить IP-адрес клиента и агента пользователя, который вызывает мои API gRPC.

Я прочитал документацию Go gRPC и другие источники, но не нашел много ценной информации. Мало кто из них говорит о gRPC на Голанге.

Должен ли я установить значение ключа для хранения IP-адреса в контексте при настройке API gRPC?

4 ответа

В Golang GRPC вы можете использовать

func (UserServicesServer) Login(ctx context.Context, request *sso.LoginRequest) (*sso.LoginResponse, error) {
p, _ := peer.FromContext(ctx)
request.Frontendip = p.Addr.String()
.
.
}

Но не забывайте импорт "google.golang.org/grpc/peer"

Для КПГР-шлюз используется, то ClientIP может быть извлечено через x-forwarded-for

      if headers, ok := metadata.FromIncomingContext(ctx); ok {
    xForwardFor := headers.Get("x-forwarded-for")
    if len(xForwardFor) > 0 && xForwardFor[0] != "" {
        ips := strings.Split(xForwardFor[0], ",")
        if len(ips) > 0 {
            clientIp = ips[0]
        }
    }
}

На способ получения IP-адреса уже был дан хороший ответ: правильный способ получения IP-адресов клиента из http.Request (Golang)

Что касается заголовка User-Agent, вам просто нужно проанализировать User-Agent заголовок вроде такой: userAgent := response.Header.Get("User-Agent")

В Golang GRPC контекст имеет 3 значения

  1. власть

  2. Тип содержимого

  3. пользовательский агент

            md,ok:=metadata.FromIncomingContext(ctx)
    fmt.Printf("%+v%+v",md,ok)
    
Другие вопросы по тегам