2012-08-08 28 views
10

私のクラス(SimpleChannelHandlerを拡張)では、メッセージが最初に送信されたIPを取得しようとしています。Netty:messageReceivedでのリモート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)); 

    .. 

これは、正しいクライアントアドレス(10.52.45.4)ではなく、ip 10.0.0.1(ゲートウェイ)を出力します。

私はしようとしている、またはそこに何かネットワークの設定に間違いがある可能性を取得する方法はありますか?

+3

より新しいnetty 4.1.5 '(InetSocketAddress)ctx.channel()。remoteAddress())。getAddress()。getHostAddress();' – Aaron

答えて

4

ゲートウェイが何らかのNATを実行するため、ゲートウェイIPが表示されます。その場合は、あなたのプロトコルにsource-ipアドレスを含めてそこから抽出するしかありません。

+0

そうだそうです。私はあなたが提案し、プロトコルにsource-ip(この場合はid)を含めることをお勧めします。ありがとう。 – northernd

0

10.0.0で始まるIPアドレスは内部であるため、おそらく同じWiFiルーターのものに接続している可能性があります。 10.52.45.4のipを取得するには、ルータの外部に接続する必要があります。 (ポートを転送することを忘れないでください)

関連する問題