Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

Is your application using a security manager? getLocalHost will return the loopback address if it's unable to connect to your address.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top