如下为dubbo的代码
private static Optional<InetAddress> toValidAddress(InetAddress address) {if (address instanceof Inet6Address) {Inet6Address v6Address = (Inet6Address) address;if (isPreferIPV6Address()) {return Optional.ofNullable(normalizeV6Address(v6Address));}}if (isValidV4Address(address)) {return Optional.of(address);}return Optional.empty();}private static InetAddress getLocalAddress0() {InetAddress localAddress = null;try {localAddress = InetAddress.getLocalHost();Optional<InetAddress> addressOp = toValidAddress(localAddress);if (addressOp.isPresent()) {return addressOp.get();}} catch (Throwable e) {logger.warn(e);}try {Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();if (null == interfaces) {return localAddress;}while (interfaces.hasMoreElements()) {try {NetworkInterface network = interfaces.nextElement();if (network.isLoopback() || network.isVirtual() || !network.isUp()) {continue;}Enumeration<InetAddress> addresses = network.getInetAddresses();while (addresses.hasMoreElements()) {try {Optional<InetAddress> addressOp = toValidAddress(addresses.nextElement());if (addressOp.isPresent()) {try {if (addressOp.get().isReachable(100)) {return addressOp.get();}} catch (IOException e) {// ignore}}} catch (Throwable e) {logger.warn(e);}}} catch (Throwable e) {logger.warn(e);}}} catch (Throwable e) {logger.warn(e);}return localAddress;}public static String getHostName(String address) {try {int i = address.indexOf(':');if (i > -1) {address = address.substring(0, i);}String hostname = HOST_NAME_CACHE.get(address);if (hostname != null && hostname.length() > 0) {return hostname;}InetAddress inetAddress = InetAddress.getByName(address);if (inetAddress != null) {hostname = inetAddress.getHostName();HOST_NAME_CACHE.put(address, hostname);return hostname;}} catch (Throwable e) {// ignore}return address;}
