确定网络掩码在Java中是否有效

时间:2012-04-10 14:32:55

标签: java ip-address

Java 6中确定给定地址是否为有效网络掩码的最简单方法是什么?我找到了一个基本上创建一个有效IP数组的解决方案,用于比较(即“255.255.255.255”,“255.255.255.254”,“255.255.255.252”等)。有更简单的方法还是这是最好的方式?

4 个答案:

答案 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地址的组件可以有前导零。
  • IP地址也可以用三个,两个甚至一个组件写入。

有关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
}