2012-05-04 10 views
2

現在のシステムはソケット経由で接続を受けており、接続されたクライアントのプライベートIPを決定する必要があります。現在、connectingSocket.getInetAddress()経由で公開IPに簡単にアクセスできますが、をプライベートにする最良の方法は何ですか?JavaのプライベートIP

ありがとうございます!

答えて

8

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

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

2

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

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

おそらく、質問するのに最適な質問は、その情報が欲しい/必要がある理由です。個人のロギングやトラッキングの場合、プライベートIPはいつでも変更でき(ほとんどの人はDHCPを使用します)、ほとんどの人にDHCPロギング/履歴を有効にすることはできません。その結果、パブリックIP->プライベートIP経由で接続を開始したハードウェアを追跡するのは不可能な作業になります。

関連する問題