2012-08-08 17 views
10

En mi clase (extiende SimpleChannelHandler) Estoy tratando de obtener la dirección IP desde donde se envió originalmente el mensaje.Netty: obtener dirección IP remota en messageReceived

@Override 
public void messageReceived(ChannelHandlerContext ctx, MessageEvent ev) throws Exception { 
    String host = ((InetSocketAddress)ctx.getChannel().getRemoteAddress()).getAddress().getHostAddress(); 
    int port = ((InetSocketAddress)ctx.getChannel().getRemoteAddress()).getPort(); 
    LOG.debug(String.format("host:%s port:%d", host, port)); 

    .. 

Esto imprime IP 10.0.0.1 (puerta de enlace), en lugar de la dirección del cliente correcto (10.52.45.4).

¿Hay alguna forma de obtener la ip que estoy tratando o podría haber algún problema con la configuración de la red?

+3

Sólo una pequeña actualización en la sintaxis con la última netty 4.1.5 '((InetSocketAddress) ctx.channel(). remoteAddress()). getAddress(). getHostAddress();' – Aaron

Respuesta

4

Supongo que verá la puerta de enlace ip porque la puerta de enlace tiene algún tipo de NAT. Si es así, la única posibilidad que tiene es incluir la dirección IP de origen en su protocolo y extraerla de allí.

+0

Ese parece ser el caso. Decidí que era mejor hacer lo que sugirió e incluí el origen-ip (o id en este caso) en el protocolo. Gracias. – northernd

0

Las direcciones Ip que comienzan con 10.0.0 son internas, probablemente lo esté conectando a algo en el mismo enrutador WiFi. Para obtener la ip 10.52.45.4, debe conectarse fuera de su enrutador. (no se olvide de reenviar el puerto)

Cuestiones relacionadas