Search code examples
javaipcidrnetmask

Calculate CIDR from a given netmask - Java


Is there a way to calculate a CIDR given a Sub net mask using any Java lib/function/trick?? I have been looking for a while and all I can find is from CIDR -> Netmask and I need it the other way arround Netmask -> CIDR ... Im not that handy on Java, but im willing to read a lot =) thnx guys

PzP =)


Solution

  • Whipped up a quick example. This converts an InetAddress into a cidr value, it also validates that the InetAddress represents a valid netmask.

    The test input is 255.255.128.0. The output cidr is 17.

    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));
    
        }
    }
    

    Credit for psuedocode @ https://stackoverflow.com/a/10090956/260633