user1231969
user1231969

Reputation:

IP Address in Java on Linux

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

Answers (2)

dan
dan

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

rollstuhlfahrer
rollstuhlfahrer

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

Related Questions