如何使用 grpc-java 从请求元数据中获取客户端 ip
How to get client ip from request metadata with grpc-java
我使用grpc-java并通过ServerInterceptor获取元数据,但是我得到以下信息没有客户端ip地址,权限是服务器ip,我如何获取客户端ip?谢谢。
Metadata({: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)]})
元数据中未提供客户端 IP。但是你可以调用 ServerCall.attributes() and get the Grpc.TRANSPORT_ATTR_REMOTE_ADDR.
请注意 API 不稳定,可能会更改。
在最新的 (1.2.0) 中,gRPC 在拦截器中使用 io.grpc.Grpc.TRANSPORT_ATTR_REMOTE_ADDR
属性来获取远程地址。
客户端 IP 作为 gRPC 属性公开 (TRANSPORT_ATTR_REMOTE_ADDR),访问它的示例是 here
String inetSocketString = serverCallCapture.get().getAttributes()
.get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR).toString();
如果在 python grpc 中,您将使用 context.peer()
.
获取客户端 IP 地址和端口
def your_method(self, request, context):
...
context.peer() # return 'ipv4:49.123.106.100:44420'
...
我使用grpc-java并通过ServerInterceptor获取元数据,但是我得到以下信息没有客户端ip地址,权限是服务器ip,我如何获取客户端ip?谢谢。
Metadata({: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)]})
元数据中未提供客户端 IP。但是你可以调用 ServerCall.attributes() and get the Grpc.TRANSPORT_ATTR_REMOTE_ADDR.
请注意 API 不稳定,可能会更改。
在最新的 (1.2.0) 中,gRPC 在拦截器中使用 io.grpc.Grpc.TRANSPORT_ATTR_REMOTE_ADDR
属性来获取远程地址。
客户端 IP 作为 gRPC 属性公开 (TRANSPORT_ATTR_REMOTE_ADDR),访问它的示例是 here
String inetSocketString = serverCallCapture.get().getAttributes()
.get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR).toString();
如果在 python grpc 中,您将使用 context.peer()
.
def your_method(self, request, context):
...
context.peer() # return 'ipv4:49.123.106.100:44420'
...