Java 获取我的 IP 地址

2022-09-01 07:07:20

我试图用Java获取我的互联网IP地址,但我一直在获取我的本地地址(即:127.0.0.1),当我的IP地址 192.168.0.xxx

我正在使用以下行:

InetAddress.getLocalHost().getHostAddress();

这似乎是获取IP地址的标准,但这不是我正在寻找的。每个教程都说要使用这行,所以我有点困惑。

任何人都可以让我知道我如何获得正确的IP地址吗?


我在连接到WiFi的设备上运行,但没有使用任何电缆。我正在使用ifconfig inet addr给出的IP连接到服务器,并且我希望获得设备的inet addr。我可以在服务器端检查套接字的IP,但认为如果设备(客户端)告诉服务器他希望其他设备连接到哪个IP会更好。


答案 1
    String ip;
    try {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface iface = interfaces.nextElement();
            // filters out 127.0.0.1 and inactive interfaces
            if (iface.isLoopback() || !iface.isUp())
                continue;

            Enumeration<InetAddress> addresses = iface.getInetAddresses();
            while(addresses.hasMoreElements()) {
                InetAddress addr = addresses.nextElement();
                ip = addr.getHostAddress();
                System.out.println(iface.getDisplayName() + " " + ip);
            }
        }
    } catch (SocketException e) {
        throw new RuntimeException(e);
    }

答案 2

NetworkInterface 类包含所有相关方法,但请注意,没有“我的 IP”这样的东西。一台计算机可以有多个接口,每个接口可以有多个 IP。

您可以使用此类列出所有接口和 IP,但从列表中选择的接口和 IP 取决于您究竟需要将此 IP 用于什么目的。

(InetAddress.getLocalHost()不查阅您的接口,它只是返回常量 127.0.0.1(对于 IPv4))