3

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

4

4 回答 4

4

如果您乐于包含外部依赖项,那么 Apache 的commons.net可能有您正在寻找的内容。

看看SubnetUtils和它的SubnetInfo嵌套类。您可以SubnetUtils使用 IP 地址和掩码构造一个。如果您的掩码无效,构造函数将引发异常,并且SubnetInfo.html#isInRange可以告诉您 IP 是否在掩码范围内。

于 2012-04-10T14:50:33.527 回答
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
于 2012-04-10T14:47:07.453 回答
1

我认为 Serg10 的答案是最简单的。

如果需要避免外部依赖,则应该使用 Inet4Address 将 IP 地址 String 转换为字节数组,然后对字节进行分析。尝试使用正则表达式或与一组固定的字符串进行比较来分析字符串可能会给出错误的答案:

  • IP 地址的组成部分可以有前导零。
  • 一个 IP 地址也可以由三个、两个甚至一个组件组成。

有关 IP 地址字符串的外观描述,请参阅Inet4Address javadoc 。

于 2012-04-10T15:27:12.580 回答
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
}
于 2012-04-10T14:57:08.497 回答