2016-04-26 9 views
0

私は相互認証されたTLS接続を構築するためにNettyを使用しています。ピア認証に失敗した場合、ピア(クライアント)のIPアドレスを取得するにはどうすればよいですか?Java/NettyでSSLピア認証が失敗した場合にピアのIPアドレスを取得します

SslHandlerをサーバーのチャネルパイプラインに追加し、チャネルがアクティブになったときに取得しようとします。このエラーは、getPeerPrincipal()が呼び出され、例外がスローされたときに発生します。私は、例外を処理するときに、ピアホストを印刷してgetPeerHost()を呼び出そうとします。しかし、私はnullを取得します。

これに関するヒント。どうもありがとう!

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

あなたはこのように、クライアントのIPを取得することができます:それは非常にうまく機能

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

。ありがとう! – user3674571

+0

@ user3674571あなたが答えを受け入れるためにクリックすると、それは私を助けることができる喜んで:) – taoxiaopang

関連する問題