update IPv6 annotation and filter invalid IPv6 (#11266)

This commit is contained in:
HHoflittlefish777 2023-01-10 14:44:51 +08:00 committed by GitHub
parent fbbca9d405
commit c06c11c754
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 3 deletions

View File

@ -412,9 +412,11 @@ public final class NetUtils {
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
if (address instanceof Inet6Address) {
if (!address.isLoopbackAddress() //filter 127.x.x.x
&& !address.isAnyLocalAddress() // filter 0.0.0.0
&& !address.isLinkLocalAddress() //filter 169.254.0.0/16
if (!address.isLoopbackAddress() //filter ::1
&& !address.isAnyLocalAddress() // filter ::/128
&& !address.isLinkLocalAddress() //filter fe80::/10
&& !address.isSiteLocalAddress()// filter fec0::/10
&& !isUniqueLocalAddress(address) //filter fd00::/8
&& address.getHostAddress().contains(":")) {//filter IPv6
return (Inet6Address) address;
}
@ -427,6 +429,17 @@ public final class NetUtils {
return null;
}
/**
* If the address is Unique Local Address.
*
* @param address {@link InetAddress}
* @return {@code true} if the address is Unique Local Address,otherwise {@code false}
*/
private static boolean isUniqueLocalAddress(InetAddress address) {
byte[] ip = address.getAddress();
return (ip[0] & 0xff) == 0xfd;
}
/**
* Returns {@code true} if the specified {@link NetworkInterface} should be ignored with the given conditions.
*