Apache-commons-net非法(但合法)CIDR表示法

时间:2014-07-24 02:02:34

标签: java networking apache-commons-net cidr

我需要能够在Java中使用CIDR表示法。

我找到了公共图书馆SubnetUtils。

当我尝试使用10.10.0.0/22的CIDR时,我得到以下内容

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Could not parse [10.10.0.0] at org.apache.commons.net.util.SubnetUtils.calculate(SubnetUtils.java:240) at org.apache.commons.net.util.SubnetUtils.<init>(SubnetUtils.java:52)

正在调用的代码是:

SubnetUtils subnetUtils = new SubnetUtils(cidrNotation); SubnetInfo info = subnetUtils.getInfo();

我看到SubnetUtils正在检查位以查看掩码是否有效。

`来自SubnetUtils.java

 private void calculate(String mask) {
    Matcher matcher = cidrPattern.matcher(mask);

    if (matcher.matches()) {
        address = matchAddress(matcher);

        /* Create a binary netmask from the number of bits specification /x */
        int cidrPart = rangeCheck(Integer.parseInt(matcher.group(5)), 0, NBITS);
        for (int j = 0; j < cidrPart; ++j) {
            netmask |= (1 << 31-j);
        }

        /* Calculate base network address */
        network = (address & netmask);

        /* Calculate broadcast address */
        broadcast = network | ~(netmask);
    } else {
        throw new IllegalArgumentException("Could not parse [" + mask + "]");
    }

`

我意识到10.0.0.0/8是A级,但我应该合法地将它切成小块。

有解决方法吗?更好的效用?还是我不能重写SubnetUtils?

1 个答案:

答案 0 :(得分:0)

我继续调查,事实证明,在递归的深处,我在CIDR上丢失了面具。第一个传递次数正常,然后在异常路径中丢失。该实用程序按预期工作。