web-dev-qa-db-ja.com

request.getRemoteAddr()を使用すると、0:0:0:0:0:0:0:1が返されます

ログインしたユーザーのIPアドレスをwebApplicationに印刷しようとしています。 IPアドレス192.168.10.120:8080/WebApplicationを使用してユーザーが別のPC(Webアプリケーションが私のPCで実行されているため、同じネットワークの下にある)から接続すると、コードrequest.getRemoteAddr()またはrequest.getLocalAddr())が返されます彼のIPアドレス。 Webアプリケーションを実行するPCからログインすると、このIPアドレス0:0:0:0:0:0:0:1が取得されます。

何故ですか?そして、これらのコマンドの違いは何ですか(どちらを使用する必要がありますか?)

43
yaylitzis

あなたの場合、ローカルマシンでアクセスしようとしているので、その値を返します。しかし、あなたの友人の一人にアクセスさせてください、そうすればgetRemoteAddrで期待される結果を受け取るでしょう

Javadocから:

getRemoteAddr -リクエストを送信したクライアントまたは最後のプロキシのIPアドレスを返します

getLocalAddr -要求が受信されたインターフェースのIPアドレスを返します。

47
Abubakkar

IPv4からIPv6に移行すると、ループバックアドレス(localhost)を_0:0:0:0:0:0:0:1_から_127.0.0.1_に変更しているため、このアドレスを取得しています。

機能に関して:

  • getRemoteAddr()はクライアントIPを返します

  • getLocalAddr()は、アプリケーションが実行されているサーバーのIPを返します

41
Robert Pounder

getRemoteAddr() は目的を解決しますが、クライアントがプロキシの背後にある場合、プロキシのIPアドレスを取得します:

クライアントまたはリクエストを送信した最後のプロキシのインターネットプロトコル(IP)アドレスを返します。

getLocalAddr ()は、アプリケーションが実行されているサーバーのIPを返します。

6
Ankur Lathi