2012-08-08 8 views
10

W mojej klasie (rozszerza SimpleChannelHandler) Próbuję uzyskać adres IP, z którego wiadomość została pierwotnie wysłana.Netty: pobieranie zdalnego adresu IP w wiadomości Odebrano

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

    .. 

To drukuje ip 10.0.0.1 (brama), zamiast poprawnego adresu klienta (10.52.45.4).

Czy istnieje sposób, aby uzyskać IP próbuję lub może być coś nie tak z konfiguracją sieci?

+3

Wystarczy niewielka aktualizacja w składni nowszej netty 4.1.5 '((InetSocketAddress) ctx.channel(). remoteAddress()). getAddress(). getHostAddress();' – Aaron

Odpowiedz

4

Domyślam się, że widzisz bramę ip, ponieważ brama wykonuje pewien rodzaj NAT. Jeśli tak, jedyną szansą na to jest dołączenie adresu źródłowego ip do protokołu i wypakowanie go z tego miejsca.

+0

Wydaje się, że tak jest. Zdecydowałem, że lepiej to zrobić, gdy zasugerowałeś i włączyłeś źródło-ip (lub identyfikator w tym przypadku) w protokole. Dzięki. – northernd

0

Adresy IP zaczynające się od 10.0.0 są wewnętrzne, prawdopodobnie łączysz je z czymś na tym samym routerze WiFi. Aby uzyskać IP 10,52.45.4, musisz połączyć się poza routerem. (nie zapomnij przesłać dalej)

Powiązane problemy