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;
}