13

私のクラス(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));

    ..

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

私がしようとしているIPを取得する方法はありますか、またはネットワーク構成に何か問題がある可能性がありますか?

4

2 に答える 2

8

ゲートウェイはある種のNATを実行するため、ゲートウェイIPが表示されると思います。もしそうなら、あなたが持っている唯一のチャンスはあなたのプロトコルにソースIPアドレスを含めてそこからそれを抽出することです。

于 2012-08-09T05:47:41.663 に答える
0

10.0.0以降のIPアドレスは内部アドレスであり、おそらく同じWiFiルーター上の何かに接続しています。10.52.45.4 IPを取得するには、ルーターの外部に接続する必要があります。(ポートフォワードを忘れないでください)

于 2017-07-04T00:50:48.407 に答える