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

标签 java ip cidr netmask

有没有办法使用任何 Java lib/function/trick 计算给定 Sub net maskCIDR?我一直在寻找一段时间,我能找到的所有东西都是来自 CIDR -> Netmask 我需要它的另一种方式是 Netmask -> CIDR ...我不是那个Java 很方便,但我愿意阅读很多书 =) 谢谢大家

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

    }
}

伪代码归功于@https://stackoverflow.com/a/10090956/260633

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

相关文章:

Java 对象类型到 Protobuf

java - 无法使用包 org.apache.commons.lang.StringUtils

networking - 现代路由器/网络设备/ISP 是否可以防止伪造的 IP header ?

java - TCP 客户端消息累积

java - 包含自身作为元素的 ArrayList 的哈希码

java - 通用网络解析器

c# - 如何拆分字符串然后将字符串的每个部分放在文本框中

Cidr 阻止 AWS 解释

java - 使用什么算法从基本 CIDR 获取子 CIDR?

azure - 当前映射子网创建中的 CIDR 值错误