2

現在のシステムはソケットを介して接続を受信して​​おり、接続されているクライアントのプライベートIPを判別する必要があります。現在、を介してパブリックIPに簡単にアクセスできますが、プライベートアドレスconnectingSocket.getInetAddress()を取得するための最良の方法は何ですか?

ありがとう!

4

2 に答える 2

8

簡単な答えは簡単です:あなたはできません。

より複雑な答え:クライアントがJavaソケットに接続する方法を制御できる場合(つまり、PROXYを介してHTTPを使用するように強制する場合)、プロキシにその情報を特別なヘッダーに追加させることができます。または、独自のプロトコルを使用する場合は、プロトコル自体にプライベートIPをエンコードできます。しかし、その情報を取得する一般的な方法はありません。NATは、プライベートIPアドレスを削除するだけです。

于 2012-05-04T18:34:08.940 に答える
3

パブリックリクエストからプライベートIPを取得できると期待するのは非論理的で安全ではありません。NATとプロキシは、いくつかの理由でプライベートIPを隠します。1つはセキュリティです。さらに、着信接続が最終的にサービスに到達する前に通過する可能性のあるNAT、プロキシ、VLANなどのレベルがいくつあるかわかりません。

クライアントを制御する場合(つまり、独自のJavaクライアントなど)、いくつかの異なる手法(ヘッダー、ペイロードの一部など)を使用して、リクエスト内の情報をエンコードできますが、接続している汎用クライアントでは、その情報を制御できません。

たぶん、尋ねるべき最良の質問は、なぜあなたがその情報を欲している/必要としているのかということです。個人のログ記録または追跡用の場合、プライベートIPはいつでも変更される可能性があり(ほとんどの人はDHCPを使用します)、大多数の人はDHCPログ記録/履歴を有効にしていないことに注意してください。したがって、どのハードウェアがパブリックIP->プライベートIPを介して接続を開始したかを追跡することは不可能な作業です。

于 2012-05-04T19:20:37.203 に答える