/ / Apache-commons-net不正な(しかし合法的な)CIDR表記 - java、networking、apache-commons-net、cidr

Apache-commons-net不正な(しかし合法的な)CIDR表記 - java、networking、apache-commons-net、cidr

JavaでCIDR表記を使用する能力が必要です。

私はCommonsライブラリ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

私は調査を続けたが、それは再帰の深いところで、私はCIDRでマスクを失った。パスの最初の数は、それが失われた例外パスでOKだった。このユーティリティは期待どおりに動作します。