Reputation:
So far I always used following to get my IP Address:
InetAddress.getLocalHost().getHostAddress()
The above method works for Windows but on linux I always get 127.0.1.1
as my IP address.
What am I doing wrong?
Upvotes: 1
Views: 1571
Reputation: 13272
Is your application using a security manager? getLocalHost will return the loopback address if it's unable to connect to your address.
Upvotes: 0
Reputation: 4078
I found some code on the Internet which should solve your problem:
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();
}
}
Source: http://www.exampledepot.com/egs/java.net/Local.html
The basic difference to your code is that all ip-adresses are checked.
Upvotes: 4