How to get the ip of the computer on linux through Java?
Do not forget about loopback addresses, which are not visible outside. Here is a function which extracts the first non-loopback IP(IPv4 or IPv6)
private static InetAddress getFirstNonLoopbackAddress(boolean preferIpv4, boolean preferIPv6) throws SocketException { Enumeration en = NetworkInterface.getNetworkInterfaces(); while (en.hasMoreElements()) { NetworkInterface i = (NetworkInterface) en.nextElement(); for (Enumeration en2 = i.getInetAddresses(); en2.hasMoreElements();) { InetAddress addr = (InetAddress) en2.nextElement(); if (!addr.isLoopbackAddress()) { if (addr instanceof Inet4Address) { if (preferIPv6) { continue; } return addr; } if (addr instanceof Inet6Address) { if (preferIpv4) { continue; } return addr; } } } } return null;}
From Java Tutorial
Why is InetAddress
not a good solution? I don't see anything in the docs about cross platform compatibility?
This code will enumerate all network interfaces and retrieve their information.
import java.io.*;import java.net.*;import java.util.*;import static java.lang.System.out;public class ListNets { public static void main(String args[]) throws SocketException { Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); for (NetworkInterface netint : Collections.list(nets)) displayInterfaceInformation(netint); } static void displayInterfaceInformation(NetworkInterface netint) throws SocketException { out.printf("Display name: %s\n", netint.getDisplayName()); out.printf("Name: %s\n", netint.getName()); Enumeration<InetAddress> inetAddresses = netint.getInetAddresses(); for (InetAddress inetAddress : Collections.list(inetAddresses)) { out.printf("InetAddress: %s\n", inetAddress); } out.printf("\n"); }}
The following is sample output from the example program:
Display name: bge0Name: bge0InetAddress: /fe80:0:0:0:203:baff:fef2:e99d%2InetAddress: /121.153.225.59Display name: lo0Name: lo0InetAddress: /0:0:0:0:0:0:0:1%1InetAddress: /127.0.0.1
This code worked 4me:
import java.net.InetAddress;import java.net.NetworkInterface;import java.net.SocketException;import java.util.Enumeration;public class ShowIp { public static void main(String[] args) throws SocketException { NetworkInterface ni = NetworkInterface.getByName("eth0"); Enumeration<InetAddress> inetAddresses = ni.getInetAddresses(); while(inetAddresses.hasMoreElements()) { InetAddress ia = inetAddresses.nextElement(); if(!ia.isLinkLocalAddress()) { System.out.println("IP: " + ia.getHostAddress()); } } }}