northernd northernd - 21 days ago 8
Java Question

Netty: getting remote ip address in messageReceived

In my class (extends SimpleChannelHandler) I'm trying to get the ip where the message was originally sent from.

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

..


This prints ip 10.0.0.1 (gateway), instead of the correct client address (10.52.45.4).

Is there any way to get the ip i'm trying to or could there be something wrong with the network configuration ?

Answer

I guess you see the gateway ip because the gateway does some kind of NAT. If so, the only chance you have is to include the source-ip address in your protocol and extract it from there.