Java 6中确定给定地址是否为有效网络掩码的最简单方法是什么?我找到了一个基本上创建一个有效IP数组的解决方案,用于比较(即“255.255.255.255”,“255.255.255.254”,“255.255.255.252”等)。有更简单的方法还是这是最好的方式?
答案 0 :(得分:4)
这个伪代码怎么样:
function IS_VALID(MASK)
boolean zeroStart = false
for each byte in MASK
for each bit
if bit = 1 and zeroStart = false
continue
if bit = 1 and zeroStart = true
return INVALID_MASK
if bit = 0 and zeroStart = false
zeroStart = true
if bit = 0 and zeroStart = true
continue
return VALID_MASK
答案 1 :(得分:4)
如果您乐意添加外部依赖项,那么Apache的commons.net可能会包含您正在寻找的内容。
查看SubnetUtils及其SubnetInfo嵌套类。您可以使用IP地址和掩码构造SubnetUtils
。如果您的掩码无效,constructor会抛出异常,SubnetInfo.html#isInRange可以告诉您IP是否在掩码的范围内。
答案 2 :(得分:1)
我认为Serg10的答案是最简单的。
如果您需要避免外部依赖,那么您应该使用Inet4Address将IP地址String转换为字节数组,然后分析字节。尝试使用正则表达式分析字符串或通过与固定字符串集进行比较,可能会给出错误的答案:
有关IP地址字符串的说明,请参阅Inet4Address javadoc。
答案 3 :(得分:0)
您可以尝试使用正则表达式
Pattern p = Pattern.compile("^((2[0-5][0-5]|1[\\d][\\d]|[\\d][\\d]|[\\d])\\.){3}(2[0-5][0-5]|1[\\d][\\d]|[\\d][\\d]|[\\d])$");
String ip = "255.255.255.0.2";
Matcher m = p.matcher(ip);
if(m.matches()) {
//valid
}