有没有一种方法可以使用任何CIDR/function/trick计算给定Sub net maskJava lib?我一直在寻找,我能找到的只是从CIDR -> Netmask而来,我需要用另一种方式来处理Netmask -> CIDR ...我对Java不太方便,但我愿意读很多书=)thnx伙计们

PzP =)

最佳答案

举个简单的例子。这会将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

关于java - 根据给定的网络掩码计算CIDR-Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19531411/

10-13 09:48