如何在连接的grpc客户端中获取IP地址?

时间:2020-07-18 08:44:25

标签: grpc

我试图建立这样的grpc频道:

grpc::CreateCustomChannel(serverIP + ":" + serverPort, grpc::SslCredentials(sslOptions), args);

我猜想grpc在内部为grpc客户端绑定了IP。

现在,如何才能获得客户端的绑定IP?

1 个答案:

答案 0 :(得分:0)

您应该添加服务器拦截器并查看remote addr属性。

类似

@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(final ServerCall<ReqT, RespT> call,
                                                             final Metadata headers,
                                                             final ServerCallHandler<ReqT, RespT> next) {

    if (call.getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR) != null) {
        final InetSocketAddress remoteAddress = (InetSocketAddress) call.getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR);
        if (remoteAddress == null) {
            throw DeviceModuleException.create(null,"Could not get remote address of grpc client");
        }
        final Context context = Context.current().withValue(ORIGIN_IP, remoteAddress.getHostName());
        return Contexts.interceptCall(context, call, headers, next);
    }
    return next.startCall(call, headers);
}