2016-04-26 3 views
0

Ich verwende Netty, um eine gegenseitige authentifizierte TLS-Verbindung aufzubauen. Wie kann ich die IP-Adresse des Peers (Client) erhalten, wenn die Peer-Authentifizierung fehlgeschlagen ist?Peer-IP-Adresse abrufen, wenn SSL-Peer-Authentifizierung in Java/Netty fehlschlägt

Ich füge SslHandler in die Channel-Pipeline des Servers und versuche, es zu bekommen, wenn der Kanal aktiviert ist. Der Fehler tritt auf, wenn getPeerPrincipal() aufgerufen wird und eine Ausnahme ausgelöst wird. Ich versuche, den Peer-Host auszudrucken und getPeerHost() aufzurufen, wenn ich die Ausnahme behandle. Aber ich bekomme nur null.

Alle Hinweise dazu. Danke vielmals!

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); 
        } 
       } 
      }); 
} 

Antwort

1

Sie können die Client-IP wie diese:

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

Es funktioniert sehr gut. Vielen Dank! – user3674571

+0

@ user3674571 froh zu helfen, kann es mir helfen, wenn Sie klicken, um die Antwort zu akzeptieren :) – taoxiaopang

Verwandte Themen