我正在使用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);
}
}
});
}
答案 0 :(得分:1)
您可以像这样获取客户端的IP:
Channel ch = ctx.channel();
String peerHost = ((java.net.InetSocketAddress)ch.remoteAddress()).getAddress().getHostAddress();