How to get the ip of the computer on linux through Java? How to get the ip of the computer on linux through Java? linux linux

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());            }        }    }}