[英]Java validating an IP address and subnet
我正在做一個分配,我必須分配IP地址,子網掩碼,默認網關和dns並對其進行驗證。
我有IP地址驗證器方法,通過使用字符串拆分,確保有3個點(4個八位字節),並且數字在有效范圍內(1-255)。
我現在試圖弄清楚如何確保它是一個可分配的地址(即,如果它是A類地址,請確保它不是124.0.0.0
等。)對於子網掩碼相同,我需要檢查部分,看看它們是255.0.0.0
還是255.255.255.0
。
我還研究了字符串分詞器,並在其中進行了while循環,並且當字符串包含更多元素時,我可以使用將每個元素打印到屏幕上.
作為delim,但我不確定如何存儲信息,以便稍后可以比較這些值(在if語句中?)
對不起,我還是編程新手,希望您能理解。 謝謝你的幫助!
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.