java - 如何通过Java获取linux上电脑的ip?

标签 java linux networking ip-address

如何通过Java获取linux上电脑的ip?

我在网上搜索了一些例子,我发现了一些关于 NetworkInterface 类的东西,但我无法理解如何获得 Ip 地址。

如果同时运行多个网络接口(interface)会怎样?将返回哪个 IP 地址。

我非常感谢一些代码示例。

P.S:到目前为止,我一直使用 InetAddress 类,这对于跨平台应用程序来说是一个糟糕的解决方案。 (赢/Linux)。

最佳答案

不要忘记在外部不可见的环回地址。这是一个提取第一个非环回 IP(IPv4 或 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;
}

关于java - 如何通过Java获取linux上电脑的ip?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/901755/

相关文章:

java - 当我的应用程序在 Android 10/Q 上关闭时,如何触发启动 Activity Intent ?

c - 硬链接(hard link)与其在 C 中的程序之间的区别

Azure 网络 - 应用程序 GW、虚拟网络 GW、VWAN、ExpressRotue、PrivateLink、Arc

java - android.database.CursorIndexOutOfBoundsException : Index -1 requested, 大小为 7

java - 在 Android 应用程序中获取致命异常

python - 在python中获取文件的自定义属性

c++ - 使用 LSB C++ 编译器构建 Boost

具有多个 key 和不同密码的 Java keystore

android - 如何找到所有不在范围内的 WiFi 网络?

java - 如何在 Java 中获取数字的 'place'(例如十位、千位等)