Java에서 CIDR 표기법을 사용할 수 있어야합니다.Apache-commons-net 불법 (그러나 합법적 인) 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를 다시 작성해야합니까?
문제는 '/ 8'대신에 '/ 22'라고 가정하는 것 같습니다. 라이브러리에서 실제로 불만 사항을 확인하기 위해 소스 코드를 확인 했습니까? 도서관이 당신이 생각하는 것에 대해 불평하고 있는지 확신 할 수 없습니다. – sigpwned