【问题标题】:Calculate CIDR from a given netmask - Java从给定的网络掩码计算 CIDR - Java
【发布时间】:2013-11-01 02:56:44
【问题描述】:

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

PzP =)

【问题讨论】:

    标签: java ip cidr netmask


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      另外在我做的一个项目中,我们使用了优秀的 Postgres DB 函数,它也支持 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

      【讨论】:

        【解决方案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

        【讨论】:

          猜你喜欢
          • 2014-10-26
          • 2021-05-20
          • 2016-08-25
          • 2011-01-31
          • 1970-01-01
          • 2013-11-15
          • 1970-01-01
          • 1970-01-01
          • 2021-06-02
          相关资源
          最近更新 更多