private InetAddress findFirstValidIPv6Address()

in spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/util/InetIPv6Utils.java [52:95]


	private InetAddress findFirstValidIPv6Address() {
		InetAddress address = null;

		try {
			for (Enumeration<NetworkInterface> nics = NetworkInterface
					.getNetworkInterfaces(); nics.hasMoreElements(); ) {
				NetworkInterface ifc = nics.nextElement();
				if (ifc.isUp() || !ifc.isVirtual() || !ifc.isLoopback()) {
					if (address != null) {
						break;
					}

					if (!ignoreInterface(ifc.getDisplayName())) {
						for (Enumeration<InetAddress> addrs = ifc
								.getInetAddresses(); addrs.hasMoreElements(); ) {
							InetAddress inetAddress = addrs.nextElement();
							if (inetAddress instanceof Inet6Address
									// filter ::1
									&& !inetAddress.isLoopbackAddress()
									// filter fe80::/10
									&& !inetAddress.isLinkLocalAddress()
									// filter ::/128
									&& !inetAddress.isAnyLocalAddress()
									// filter fec0::/10,which was discarded, but some
									// address may be deployed.
									&& !inetAddress.isSiteLocalAddress()
									// filter fd00::/8
									&& !isUniqueLocalAddress(inetAddress)
									&& isPreferredAddress(inetAddress)) {
								log.trace("Found non-loopback interface: "
										+ ifc.getDisplayName());
								address = inetAddress;
								break;
							}
						}
					}
				}
			}
		}
		catch (IOException e) {
			log.error("Cannot get first non-loopback address", e);
		}
		return address;
	}