これまでのところ、私は常に以下を使用して IP アドレスを取得しました。
InetAddress.getLocalHost().getHostAddress()
上記の方法は Windows で機能しますが、Linux では常に127.0.1.1
IP アドレスとして取得します。
私は何を間違っていますか?
これまでのところ、私は常に以下を使用して IP アドレスを取得しました。
InetAddress.getLocalHost().getHostAddress()
上記の方法は Windows で機能しますが、Linux では常に127.0.1.1
IP アドレスとして取得します。
私は何を間違っていますか?
あなたの問題を解決するはずのコードをインターネットで見つけました:
String hostName = InetAddress.getLocalHost().getHostName();
InetAddress addrs[] = InetAddress.getAllByName(hostName);
String myIp = "UNKNOWN";
for (InetAddress addr: addrs) {
System.out.println ("addr.getHostAddress() = " + addr.getHostAddress());
System.out.println ("addr.getHostName() = " + addr.getHostName());
System.out.println ("addr.isAnyLocalAddress() = " + addr.isAnyLocalAddress());
System.out.println ("addr.isLinkLocalAddress() = " + addr.isLinkLocalAddress());
System.out.println ("addr.isLoopbackAddress() = " + addr.isLoopbackAddress());
System.out.println ("addr.isMulticastAddress() = " + addr.isMulticastAddress());
System.out.println ("addr.isSiteLocalAddress() = " + addr.isSiteLocalAddress());
System.out.println ("");
if (!addr.isLoopbackAddress() && addr.isSiteLocalAddress()) {
myIp = addr.getHostAddress();
}
}
ソース: http://www.exampledepot.com/egs/java.net/Local.html
コードとの基本的な違いは、すべての IP アドレスがチェックされることです。
アプリケーションはセキュリティ マネージャを使用していますか? getLocalHost は、アドレスに接続できない場合、ループバック アドレスを返します。