1

InetAddress.getLocalHost().getHostAddress()がとは異なる IP アドレスを返すのはどのような状況InetAddress.getByName("localhost")ですか?

私のシステムでは、一方が戻り192.168.0.2、もう一方が戻ります127.0.0.1

4

2 に答える 2

1

どうやら、 InetAddress.getLocalHost().getHostAddress() はシステム IP と InetAddress.getByName("localhost") ループバック アドレスを返しています。


getByName() の InetAddress API 仕様に従って 、Parthian によって説明されているセキュリティ マネージャーのケースを疑っています。 28java.lang.String%29

このメソッドは次をスローします: SecurityException - セキュリティ マネージャが存在し、その checkConnect メソッドが操作を許可しない場合。

一方、 getLocalHost() はそのような例外をスローしませんが、フェイルセーフとしてループバック アドレスを返します。 http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getLocalHost%28%29

getByName() は、ホスト名を解決するために DNS に接続する必要があります。この場合の getByName() は、/etc/hosts (Linux) または C:\Windows\System32\drivers\etc (Windows) から「localhost」を解決しています。ホスト名と IP のペアは、これらのファイルでユーザーが構成できます。確認するには、localhost に任意の値を指定できます。たとえば、hosts ファイルで localhost 127.0.0.2 を指定すると、getByName がそれを返します。

于 2014-06-04T13:37:10.467 に答える