从给定的网络掩码计算CIDR - Java

时间:2013-10-23 01:52:38

标签: java ip cidr netmask

有没有办法使用任何CIDR / function / trick来计算给定Sub net mask的{​​{1}}?我一直在寻找一段时间,而我所能找到的只是来自Java lib而我需要另一种方式CIDR -> Netmask ...我在Netmask -> CIDR上不是那么方便,但我愿意读了很多=)thnx人

PzP =)

3 个答案:

答案 0 :(得分:6)

掀起一个简单的例子。这会将InetAddress转换为cidr值,它还会验证InetAddress代表有效的网络掩码。

测试输入为255.255.128.0。输出cidr为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));

    }
}

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

的功劳

答案 1 :(得分:1)

您可以使用Apache SubnetUtils module中的toCidrNotation功能执行此操作。 Here's a Java example.

答案 2 :(得分:0)

查看Apache Net Jar(Class SubnetUtils)http://commons.apache.org/proper/commons-net/download_net.cgi

同样在我正在进行的项目中,我们使用了支持IPV6的优秀Postgres DB功能http://www.postgresql.org/docs/8.1/static/functions-net.html

http://commons.apache.org/proper/commons-net/javadocs/api-3.3/index.html