【发布时间】:2023-04-08 03:27:01
【问题描述】:
我正在使用java.net.Inet6Address 来验证输入字符串是否为有效的IPv6 地址。
这是我的代码 sn-p:
public static boolean isValidIPv6ddress(String address) {
if (address.isEmpty()) {
return false;
}
try {
Object res = InetAddress.getByName(address);
return res instanceof Inet6Address;
} catch (final UnknownHostException ex) {
return false;
}
}
不幸的是,即使对于以下无效的输入,上述方法也会返回true:
System.out.println(isValidIPv6ddress("2A00:17C8:50C:0000:0000:0000:0000:00001"));
System.out.println(isValidIPv6ddress("2A00:17C8:50C:0000:0000:00000000000000:0000:00001"));
System.out.println(isValidIPv6ddress("2A00:17C8:50C:00001235:0000:00000000000000:0000:00001"));
API 是否忽略前导零?或者 API 中是否存在 错误?
【问题讨论】:
-
根据哪些具体规则您认为这些无效?
-
@SotiriosDelimanolis,根据 RFC 4291。请参阅下面的答案。