Java验证IP地址和子网

时间:2015-03-25 17:15:35

标签: java

我正在进行一项任务,我必须分配IP地址,子网掩码,默认网关和DNS并验证它们。

我有IP地址验证器方法,确保有3个点(4个八位字节),并且使用字符串拆分数字在有效范围内(1-255)。

我现在正在试图弄清楚如何确保它是一个可分配的地址(IE如果它是A类地址,请确保它不是124.0.0.0等。)对于子网掩码,我需要检查这些部分,看看它们是255.0.0.0还是255.255.255.0

我也研究了字符串标记符,并且有一个字符串经过一个while循环,而字符串中有更多的元素,我可以使用.作为一个分区将每个元素打印到屏幕上,但我不是确定如何存储信息,以便稍后比较值(在if语句中?)

对不起,我对编程还很陌生,希望你能理解。谢谢你的帮助!

1 个答案:

答案 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