美文网首页Java游戏服务器开发
看阿里的代码Java是如何获取本地IP地址的

看阿里的代码Java是如何获取本地IP地址的

作者: 王广帅 | 来源:发表于2020-05-30 20:32 被阅读0次

    在服务器开发过程中,有时候为了方便,可以使用代码获取本机的IP地址,而不需要再手动配置了。阿里的代码一直是业界的标准,在看RocketMQ的源码的时候,看到了他们的一个获取本机IP地址的工具类,在这里给大家分享出来,有时候的拿来就可以使用。

    public static String getLocalAddress() {
            try {
                // Traversal Network interface to get the first non-loopback and non-private address
                Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
                ArrayList<String> ipv4Result = new ArrayList<String>();
                ArrayList<String> ipv6Result = new ArrayList<String>();
                while (enumeration.hasMoreElements()) {
                    final NetworkInterface networkInterface = enumeration.nextElement();
                    final Enumeration<InetAddress> en = networkInterface.getInetAddresses();
                    while (en.hasMoreElements()) {
                        final InetAddress address = en.nextElement();
                        if (!address.isLoopbackAddress()) {
                            if (address instanceof Inet6Address) {
                                ipv6Result.add(normalizeHostAddress(address));
                            } else {
                                ipv4Result.add(normalizeHostAddress(address));
                            }
                        }
                    }
                }
    
                // prefer ipv4
                if (!ipv4Result.isEmpty()) {
                    for (String ip : ipv4Result) {
                        if (ip.startsWith("127.0") || ip.startsWith("192.168")) {
                            continue;
                        }
    
                        return ip;
                    }
    
                    return ipv4Result.get(ipv4Result.size() - 1);
                } else if (!ipv6Result.isEmpty()) {
                    return ipv6Result.get(0);
                }
                //If failed to find,fall back to localhost
                final InetAddress localHost = InetAddress.getLocalHost();
                return normalizeHostAddress(localHost);
            } catch (Exception e) {
                log.error("Failed to obtain local address", e);
            }
    
            return null;
        }
    
        public static String normalizeHostAddress(final InetAddress localHost) {
            if (localHost instanceof Inet6Address) {
                return "[" + localHost.getHostAddress() + "]";
            } else {
                return localHost.getHostAddress();
            }
        }
    
    公众号

    相关文章

      网友评论

        本文标题:看阿里的代码Java是如何获取本地IP地址的

        本文链接:https://www.haomeiwen.com/subject/krubahtx.html