在Java中获取eth0接口的IP地址只返回IPv6地址而不是IPv4

6
我编写了以下代码来获取我正在使用的机器上eth0接口的IPv4地址。然而,该代码仅找到“fe80:x:x:x:xxx:xxxx:xxxx:xxxx”,由于我正在寻找IPv4地址,因此该地址不被返回。
这是代码。
    interfaceName = "eth0";
    NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName);
    Enumeration<InetAddress> inetAddress = networkInterface.getInetAddresses();
    InetAddress currentAddress;
    currentAddress = inetAddress.nextElement();
    while(inetAddress.hasMoreElements())
    {
        System.out.println(currentAddress);
        if(currentAddress instanceof Inet4Address && !currentAddress.isLoopbackAddress())
        {
            ip = currentAddress.toString();
            break;
        }
        currentAddress = inetAddress.nextElement();
    }
1个回答

6

这里涉及到获取下一个元素的逻辑问题。在运行比较语句之前,我先获取了 inetAddress 下一个元素,导致没有更多的元素。

以下代码已经修复了这个问题。

    interfaceName = "eth0";
    NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName);
    Enumeration<InetAddress> inetAddress = networkInterface.getInetAddresses();
    InetAddress currentAddress;
    currentAddress = inetAddress.nextElement();
    while(inetAddress.hasMoreElements())
    {
        currentAddress = inetAddress.nextElement();
        if(currentAddress instanceof Inet4Address && !currentAddress.isLoopbackAddress())
        {
            ip = currentAddress.toString();
            break;
        }
    }

3
在我的看法中,为了语义上的正确性,您需要删除 intetAddress.nextElement() 的第一个调用 - 即在 while 循环之前的那个调用,因为根据当前的编写方式,您总是会扔掉第一个元素! - jbowman
1
currentAddress.toString() 返回 "/192.168.1.13"。因此,可以使用 currentAddress.getHostAddress() 代替,它返回 "192.168.1.13"。 - willtardy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接