2013-10-23 6 views
5

CIDRSub net mask 일 때, Java lib/function/trick을 사용하여 계산할 수 있습니까? 나는 잠시 동안 찾고있다 그리고 내가 찾을 수있는 모든 CIDR -> Netmask에서 내가 그것을 Java에 임이 편리하지 다른 방법 arround를 Netmask -> CIDR을 ... 필요하지만,주어진 netmask에서 CIDR을 계산하십시오. -

PzP를) = 많이 읽어 기꺼이 메신저 thnx들 =)

답변

5
을 지원하는 뛰어난 포스트 그레스 DB 기능을 사용하고 있던 프로젝트의 또 http://commons.apache.org/proper/commons-net/download_net.cgi

되세요

빠른 예를 들어 보겠습니다. 이렇게하면 InetAddress이 cidr 값으로 변환되고 InetAddress이 유효한 넷 마스크임을 나타냅니다.

테스트 입력은 255.255.128.0입니다. 출력 cidr은 17입니다. https://stackoverflow.com/a/10090956/260633

@ psuedocode에 대한

package com.stackoverflow._19531411; 

import java.net.InetAddress; 


public class NetmaskToCIDR { 


    public static int convertNetmaskToCIDR(InetAddress netmask){ 

     byte[] netmaskBytes = netmask.getAddress(); 
     int cidr = 0; 
     boolean zero = false; 
     for(byte b : netmaskBytes){ 
      int mask = 0x80; 

      for(int i = 0; i < 8; i++){ 
       int result = b & mask; 
       if(result == 0){ 
        zero = true; 
       }else if(zero){ 
        throw new IllegalArgumentException("Invalid netmask."); 
       } else { 
        cidr++; 
       } 
       mask >>>= 1; 
      } 
     } 
     return cidr; 
    } 

    public static void main(String[] args) throws Exception { 

     InetAddress netmask = InetAddress.getByName("255.255.128.0"); 

     System.out.println(convertNetmaskToCIDR(netmask)); 

    } 
} 

신용