在Java / Netty中SSL对等身份验证失败时获取对等方的IP地址

时间:2016-04-26 16:52:31

标签: netty

我正在使用Netty构建相互认证的TLS连接。当对等身份验证失败时,如何获取对等方(客户端)的IP地址?

我将SslHandler添加到服务器的通道管道中,并在激活通道时尝试获取它。当调用getPeerPrincipal()并抛出异常时,会发生故障。我尝试打印出对等主机,并在处理异常时调用getPeerHost()。但我只能得到零。

关于此的任何提示。非常感谢!

public void channelActive(final ChannelHandlerContext ctx) {
    ctx.pipeline().get(SslHandler.class).handshakeFuture()
            .addListener(new GenericFutureListener<Future<Channel>>() {
                @Override
                public void operationComplete(Future<Channel> future) {
                    try {
                        String peerX = ctx.pipeline().get(SslHandler.class).engine().getSession().getPeerPrincipal()
                                .getName();
                    } catch (Exception e) {
                        String peerHost = ctx.pipeline().get(SslHandler.class).engine().getSession().getPeerHost();
                        logger.error("Failed: with" + peerHost);
                        logger.error("Error in activating receiving channel", e);
                    }
                }
            });
}

1 个答案:

答案 0 :(得分:1)

您可以像这样获取客户端的IP:

 Channel ch = ctx.channel(); 
 String peerHost = ((java.net.InetSocketAddress)ch.remoteAddress()).getAddress().getHostAddress();