我正在进行一项任务,我必须分配IP地址,子网掩码,默认网关和DNS并验证它们。
我有IP地址验证器方法,确保有3个点(4个八位字节),并且使用字符串拆分数字在有效范围内(1-255)。
我现在正在试图弄清楚如何确保它是一个可分配的地址(IE如果它是A类地址,请确保它不是124.0.0.0
等。)对于子网掩码,我需要检查这些部分,看看它们是255.0.0.0
还是255.255.255.0
。
我也研究了字符串标记符,并且有一个字符串经过一个while循环,而字符串中有更多的元素,我可以使用.
作为一个分区将每个元素打印到屏幕上,但我不是确定如何存储信息,以便稍后比较值(在if语句中?)
对不起,我对编程还很陌生,希望你能理解。谢谢你的帮助!
答案 0 :(得分:0)
import java.util.regex
public abstract class CommonBase {
private final static Long[] SUBNET_MASK = new Long[]{4294934528L, 4294950912L, 4294959104L, 4294963200L, 4294965248L, 4294966272L, 4294966784L, 4294967040L, 4294967168L, 4294967232L, 4294967264L, 4294967280L, 4294967288L, 4294967292L, 4294967294L, 4294967295L};
public static boolean isValidIpAddress(String ipAddress) {
if (ipAddress != null) {
Matcher matcher = Patterns.IP_ADDRESS.matcher(ipAddress);
if (matcher != null) {
return matcher.matches();
}
}
return false;
}
public static long ipAddressToLong(String ipAddress) {
if (ipAddress != null) {
String[] s = ipAddress.split("\\.");
if (s != null && s.length == 4) {
long result = 0;
for (int i = 3; i >= 0; i--) {
try {
long n = Long.parseLong(s[3 - i]);
result |= n << (i * 8);
} catch (Exception ex) {
return -1;
}
}
return result;
}
}
return -1;
}
public static boolean isValidSubnetMask(String subnetMask) {
if (subnetMask != null) {
long lSubnetMask = ipAddressToLong(subnetMask);
if (lSubnetMask > 0) {
return Arrays.asList(SUBNET_MASK).contains(lSubnetMask);
}
}
return false;
}
}
如何使用上述代码:
CommonBase.isValidIpAddress("192.168.0.1"); // true
CommonBase.isValidSubnetMask("255.255.255.0"); // true