簡體   English   中英

Java驗證IP地址和子網

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM