Вычислить CIDR по заданной сетевой маске — Java

Есть ли способ вычислить CIDR с учетом Sub net mask, используя любую Java lib/функцию/трюк?? Я искал какое-то время, и все, что я могу найти, это от CIDR -> Netmask, и мне это нужно наоборот вокруг Netmask -> CIDR ... Я не очень разбираюсь в Java, но я готов много читать =) спасибо, ребята

ПзП =)


person PzP01    schedule 23.10.2013    source источник


Ответы (3)


На скорую руку накидал пример. Это преобразует 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));

    }
}

Кредит для псевдокода @ https://stackoverflow.com/a/10090956/260633

person Dev    schedule 23.10.2013

Вы можете использовать функцию toCidrNotation в модуль Apache SubnetUtils. Вот пример Java.

person Christian Ternus    schedule 23.10.2013

Взгляните на Apache Net Jar (класс SubnetUtils) http://commons.apache.org/proper/commons-net/download_net.cgi

Также в проекте, которым я занимался, мы использовали отличные функции БД Postgres, которые также поддерживали IPV6 http://www.postgresql.org/docs/8.1/static/functions-net.html

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

person Scary Wombat    schedule 23.10.2013