2014-07-24 1 views
0

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를 다시 작성해야합니까?

+0

문제는 '/ 8'대신에 '/ 22'라고 가정하는 것 같습니다. 라이브러리에서 실제로 불만 사항을 확인하기 위해 소스 코드를 확인 했습니까? 도서관이 당신이 생각하는 것에 대해 불평하고 있는지 확신 할 수 없습니다. – sigpwned

답변

0

나는 조사를 계속했고 그것은 재발의 깊이가 내 CIDR에서 마스크를 잃어 버렸음이 밝혀졌습니다. 첫 번째 패스 수는 예외 경로에서 확인 된 다음 손실되었습니다. 이 유틸리티는 예상대로 작동합니다.

관련 문제