/*
* 效验IPv6格式及范围
* 需要下载java_ipv6_0.7.jar包
*/
public class ValidateIPv6 {
public static boolean isValidateIPv6(String ip) {
try {
String tempIP = ip.trim();
if (null == tempIP || 0 == tempIP.length()) {
return false;
}
if (false == tempIP.contains(":") || tempIP.length() > 45) {
return false;
}
String regex = "";// ipv6正则表达式
if (!ip.matches(regex)) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
String tempIP = ip.trim();
StringBuffer sb = new StringBuffer();
if (ip.contains(".")) {
String[] ipv6Arry = tempIP.split("\\:");
for (int i = 0; i < ipv6Arry.length - 1; i++) {
sb.append(ipv6Arry[i] + ":");
}
String ipv4 = ipv6Arry[ipv6Arry.length - 1];
if (isValidateIPv4(ipv4)) {
String ipv4Arr[] = ipv4.split("\\.");
for (int i = 0; i < ipv4Arr.length; i++) {
String ipv6 = Integer.toHexString(Integer
.parseInt(ipv4Arr[i]));
sb.append(ipv6);
if (i == 1)
sb.append(":");
}
}
} else {
sb.append(ip);
}
return sb.toString();
}
public static boolean isValidateIPv4(String ip) {
try {
String tempIP = ip.trim();
if (null == tempIP || 0 == tempIP.length()
|| false == tempIP.contains(".")) {
return false;
}
String regex = "";// ipv4正则表达式
if (!ip.matches(regex)) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
public static boolean isMastAddrIPv6Range(String ip) {
static String MCASADDR_MIN_IPV6 = "ff00:0";
static String MCASADDR_MAX_IPV6 = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
final IPv6AddressRange range = IPv6AddressRange.fromFirstAddLast(
IPv6Address.fromString(MCASADDR_MIN_IPV6), IPv6Address
.fromString(MCASADDR_MAX_IPV6));
try {
String ipv6 = ipv6Format(ip);
return range.constains(IPv6Address.fromString(ipv6));
} catch (Exception e) {
return false;
}
}
//效验IPv6是否相等
public static boolean isDupliValidIP(String ip1, String ip2) {
if (ip1.contains(":") && ip2.contains(":")) {
if (isValidateIPv6(ip1) && isValidateIPv6(ip2)) {
String ipv61 = ipv6Format(ip1);
String ipv62 = ipv6Format(ip2);
final IPv6Address iPv6Address1 = IPv6Address.fromString(ipv61);
final IPv6Address iPv6Address2 = IPv6Address.fromString(ipv62);
if (0 == iPv6Address1.compareTo(iPv6Address2)) {
return true;
}
}
}else{
if(isValidateIPv4(ip1) && isValidateIPv4(ip2)){
String[] quadrants1 = ip1.split("\\.");
String[] quadrants2 = ip2.split("\\.");
try {
for (int i = 0; i < 4; i++) {
if(Integer.parseInt(quadrants1[i])!=Integer.parseInt(quadrants2[i])){
return false;
}
}
return true;
} catch (Exception e) {
return false;
}
}
}
return false;
}
ipv4 | ipv6 (this is good based on test) ipv4或ipv6正则效验表达式
([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:)))(%.+)?)
ipv4多播地址225.0.0.0到239.255.255.255范围效验的正则表达式:
(23[0-9]|22[5-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}|[0-9])){3}
ipv6多播地址ff00:00到ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff范围效验的正则表达式:
(
(([Ff]{2}[0-9A-Fa-f][0-9A-Fa-f]:)([0-9A-Fa-f]{1,4}:){6}([0-9A-Fa-f]{1,4}|:))
|(([Ff]{2}[0-9A-Fa-f][0-9A-Fa-f]:)([0-9A-Fa-f]{1,4}:){5}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3})|:))
|(([Ff]{2}[0-9A-Fa-f][0-9A-Fa-f]:)([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3})|:))
|(([Ff]{2}[0-9A-Fa-f][0-9A-Fa-f]:)([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))
|(([Ff]{2}[0-9A-Fa-f][0-9A-Fa-f]:)([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))
|(([Ff]{2}[0-9A-Fa-f][0-9A-Fa-f]:)([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))
|(([Ff]{2}[0-9A-Fa-f][0-9A-Fa-f]:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))
|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))
)(%.+)?