Netty: получение удаленного IP-адреса в messageReceived

В моем классе (extends SimpleChannelHandler) я пытаюсь получить ip, откуда сообщение было отправлено.

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

    ..

Это печатает ip 10.0.0.1 (шлюз) вместо правильного адреса клиента (10.52.45.4).

Есть ли способ получить ip, который я пытаюсь или может быть что-то не так с конфигурацией сети?

Ответ 1

Я предполагаю, что вы видите шлюз ip, потому что шлюз делает какой-то NAT. Если это так, единственный шанс, который у вас есть, - включить исходный IP-адрес в свой протокол и извлечь его оттуда.

Ответ 2

Ip-адреса, начиная с 10.0.0, являются внутренними, вы, вероятно, подключаете их к чему-то на одном и том же маршрутизаторе WiFi. Чтобы получить IP-адрес 10.52.45.4, вам необходимо подключиться за пределы вашего маршрутизатора. (не забудьте переместить порт)