1

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?

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • Possible duplicate of: http://stackoverflow.com/questions/1062041/ip-address-not-obtained-in-java?rq=1 – Baz Aug 24 '12 at 08:08

2 Answers2

4

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.

rollstuhlfahrer
  • 3,988
  • 9
  • 25
  • 38
0

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

dan
  • 13,132
  • 3
  • 38
  • 49