如何使用grpc-java从请求元数据中获取客户端ip

时间:2016-03-21 06:41:19

标签: java grpc

我使用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 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

如果在python grpc中,您将使用grant获取客户端ip地址和端口。

context.peer()

答案 3 :(得分:0)

客户端IP作为gRPC属性公开(TRANSPORT_ATTR_REMOTE_ADDR),访问它的示例是here

 String inetSocketString = serverCallCapture.get().getAttributes()
    .get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR).toString();