有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中仅获取公共IP地址

我在stackoverflow中看到了关于这个问题的一些答案。我的代码的主要区别在于,它只获取公共IP地址,方法是在找到环回接口或点对点连接的IP时继续

Obs:我将其与本地主机的IP进行比较,因为在VirtualBox中,本地主机是用于与该机器通信的IP。我想知道为什么。该方法返回一个字符串,但很可能是InetAddress。反馈总是很好的。谢谢:)


共 (1) 个答案

  1. # 1 楼答案

    private String getPublicIpAddress() {
        String res = null;
        try {
            String localhost = InetAddress.getLocalHost().getHostAddress();
            Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();
            while (e.hasMoreElements()) {
                NetworkInterface ni = (NetworkInterface) e.nextElement();
                if(ni.isLoopback())
                    continue;
                if(ni.isPointToPoint())
                    continue;
                Enumeration<InetAddress> addresses = ni.getInetAddresses();
                while(addresses.hasMoreElements()) {
                    InetAddress address = (InetAddress) addresses.nextElement();
                    if(address instanceof Inet4Address) {
                        String ip = address.getHostAddress();
                        if(!ip.equals(localhost))
                            System.out.println((res = ip));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }