現在のシステムはソケット経由で接続を受けており、接続されたクライアントのプライベートIPを決定する必要があります。現在、connectingSocket.getInetAddress()
経由で公開IPに簡単にアクセスできますが、をプライベートにする最良の方法は何ですか?JavaのプライベートIP
ありがとうございます!
現在のシステムはソケット経由で接続を受けており、接続されたクライアントのプライベートIPを決定する必要があります。現在、connectingSocket.getInetAddress()
経由で公開IPに簡単にアクセスできますが、をプライベートにする最良の方法は何ですか?JavaのプライベートIP
ありがとうございます!
簡単な答えは簡単です:できません。
もっと複雑な答え:クライアントがJavaソケットに接続する方法を制御できる場合(つまり、PROXYを介してHTTPを使用するように強制する場合)、プロキシがその情報を特別なヘッダーに追加する可能性があります。また、独自のプロトコルを使用する場合は、プロトコル自体でプライベートIPをエンコードすることもできます。しかし、その情報を入手する一般的な方法はありません。 NATは、単にプライベートIPアドレスを削除します。
パブリックリクエストからプライベートIPを取得できると予想するのは非論理的であり、安全ではありません。 NATとプロキシはいくつかの理由でプライベートIPを隠します.1つはセキュリティです。さらに、着信接続が最終的にサービスに到達するまでに、NAT接続やプロキシやVLANなどのレベルがいくつあるかわからない場合があります。
クライアントを制御する場合(つまり、独自のJavaクライアントなど)、いくつかの異なる手法(ヘッダー、ペイロードの一部など)を使用してリクエスト内の情報をエンコードできますが、接続している汎用クライアントの場合は、その情報を制御できません。
おそらく、質問するのに最適な質問は、その情報が欲しい/必要がある理由です。個人のロギングやトラッキングの場合、プライベートIPはいつでも変更でき(ほとんどの人はDHCPを使用します)、ほとんどの人にDHCPロギング/履歴を有効にすることはできません。その結果、パブリックIP->プライベートIP経由で接続を開始したハードウェアを追跡するのは不可能な作業になります。