7

我使用 grpc-java 并通过 ServerInterceptor 获取元数据,但是我在没有客户端 IP 地址的情况下获取以下信息,权限是服务器 IP,我如何获取客户端 IP?谢谢。

元数据({:scheme=[http], :method=[POST], :path=[/test/test1], :authority=[192.168.199.9:50051], grpc-encoding=[identity], grpc-accept- encoding=[identity,deflate,gzip], te=[trailers], content-type=[application/grpc], user-agent=[grpc-objc/0.13.0 grpc-c/0.13.0 (ios)]} )

4

4 回答 4

8

元数据中未提供客户端 IP。但是您可以调用ServerCall.attributes()并获取Grpc.TRANSPORT_ATTR_REMOTE_ADDR

请注意,API 不稳定,可能会发生变化。

于 2016-03-21T19:34:28.813 回答
5

在最新的 (1.2.0) gRPCio.grpc.Grpc.TRANSPORT_ATTR_REMOTE_ADDR中使用拦截器中的属性来获取远程地址。

于 2017-03-30T13:53:27.843 回答
4

如果在 python grpc 中,您将使用context.peer().

def your_method(self, request, context):
    ...
    context.peer() # return 'ipv4:49.123.106.100:44420'
    ...
于 2019-06-15T02:42:16.370 回答
3

客户端 IP 暴露为 gRPC 属性(TRANSPORT_ATTR_REMOTE_ADDR),访问它的示例在这里

 String inetSocketString = serverCallCapture.get().getAttributes()
    .get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR).toString();
于 2018-02-01T08:35:37.930 回答