`

同时效验ipv4和cidr ip的方法

    博客分类:
  • java
阅读更多

以下代码已经过工业级效验,已满足我厂应用的需要。如有问题,可于我留言,谢谢。

代码块

    /**
     * 将ipv4转为32 bit. 返回结果cidr的二个部分
     * 
     * @param ip
     * @return
     * @throws IPv4Exception
     */
    public static int[] convert2Bit32(String ip) throws IPv4Exception {
        int[] result = { 0, NULL_NET };
        String[] cidr = ip.split("\\/" , -1);
        if (cidr.length > 2 || cidr.length == 0) {
            throw new IPv4Exception("Invalid IPv4 " + ip);
        } else if (cidr.length == 2) {
            if (!isPositive(cidr[1])) {
                throw new IPv4Exception("Invalid IPv4 " + ip);
            }
            result[1] = Integer.parseInt(cidr[1]);
            if (result[1] < 0 || result[1] > 32) {
                throw new IPv4Exception("Invalid IPv4 " + ip);
            } else if (result[1] == 0 && !"0.0.0.0".equals(cidr[0])) {
                throw new IPv4Exception("Invalid IPv4 " + ip);
            }
        }
        String[] addr = cidr[0].split("\\." , -1);
        if (addr.length != 4) {
            throw new IPv4Exception("Invalid IPv4 " + ip);
        }
        for (String f : addr) {
            if (!isPositive(f)) {
                throw new IPv4Exception("Invalid IPv4 " + ip);
            }
            int n = Integer.parseInt(f);
            if (n < 0 || n > 255) {
                throw new IPv4Exception("Invalid IPv4 " + ip);
            }
            result[0] = (result[0] << 8) | n;
        }
        return result;



    private static boolean isPositive(String val) {
        if (val == null || val.length() == 0) {
            return false;
        }
        int n = val.length();
        if (n == 0 || n > 3) {  //此处可以不加限制,即127.0.0.00001也是正确ip
            return false;
        }
        for (int i = 0; i < n; i++) {
            if (!Character.isDigit(val.charAt(i))) {
                return false;
            }
        }
        return true;
    }  
    }

注意:

  • 效验方法 :请调用convert2Bit32方法完成效验
  • split :使用split(String regex,int limit),将limit设置为-1,来防止split将分割后的字符串结尾空字符串丢弃。这样就消除了出现将“127.0.0.1.”效验为正确的bug。
0
0
分享到:
评论

相关推荐

    IPv4 CIDR地址计算器

    使用EXCEL制作的IPv4无分类编址工具。给定一个IP地址及其前缀长度,立即计算其子网地址、对应Net Musk、广播地址及有效IP地址。

    中国各省IP地址库CIDR格式

    中国各省IP地址库CIDR格式第一批

    中国各省IP地址库CIDR格式第三批

    CIDR(Classless Inter-Domain Routing,无类域间路由)是一种用于更有效地分配和管理IPv4地址空间的机制,它取代了传统的A、B、C类地址划分方式。此IP地址库的第三批数据包含了中国不同省份和直辖市的CIDR格式IP...

    shell实现netmask掩码和cidr掩码位转换1

    shell实现netmask掩码和cidr掩码位转换 Shell 实现 Netmask 掩码和 CIDR 掩码位转换是一种常用的网络协议 软件/插件,经常在写脚本时需要实现掩码位和掩码之间的转换。下面将详细介绍 Shell 实现 Netmask 掩码和 ...

    解析CIDR表示的IP段表示的范围

    例如,在大型网络环境中,通过CIDR表示的IP段,可以更高效地分配和管理IP地址,同时,也能在路由表中节省空间。 通过阅读和理解`IpRouter.java`的源代码,我们可以深入了解CIDR在编程中的实现细节,以及如何利用...

    cidr-tools:与IPv4和IPv6 CIDR网络列表配合使用的工具

    与IPv4和IPv6 CIDR网络列表配合使用的工具 安装 $ npm i cidr-tools 例子 const cidrTools = require ( 'cidr-tools' ) ; cidrTools . merge ( [ '1.0.0.0/24' , '1.0.1.0/24' ] ) ; //=&gt; ['1.0.0.0/23'] cidrTools...

    精品专题资料(2021-2022年收藏)基于IPv4的局域网IP地址分配的关键技术研究论文.doc

    总结来说,基于IPv4的局域网IP地址分配关键技术研究主要涉及IP地址的结构、分类、分配方法以及IP地址资源的管理和优化,对于理解和设计有效的局域网IP地址分配方案至关重要。随着IPv6的推广,这些知识仍然是理解网络...

    nim-iputils:用于IP的实用程序。 它具有IPv4,IPv6和CIDR的功能

    它提供了全面的功能,涵盖了IPv4、IPv6以及CIDR(无类别域间路由)的处理,使得在编程中进行IP操作变得更加简单和高效。 ### Nim 语言介绍 Nim 是一种现代、静态类型的系统编程语言,它融合了C的性能、Python的易读...

    python实现批量的IP地址,或地址段的排序并按照CIDR格式最小化聚合。

    实现批量的IP地址,或地址段的排序并按照CIDR格式最小化聚合。 需要聚合的IP段放在ip.list文件中,聚合后的IP在文件new_ip.list # 按照序号循环IP列表 for i in range(len(IpIntList)): # 前一个IP prev_ip = ...

    CIDR子网掩码计算工具

    CIDR(Classless Inter-Domain Routing)是一种用于更有效地分配和路由IPv4地址空间的方法,它取代了传统的基于类的网络划分方式。CIDR的主要特点是使用斜杠“/”后的数字来表示网络前缀的位数,这个数字被称为CIDR...

    CIDRUtils.java 判断IP是否在指定范围内

    java判断IP是否在指定范围内,支持IPV4和IPV6。

    CIDR知识点加案例

    CIDR的主要特点是将IP地址和路由前缀结合,允许更加灵活的子网划分和路由聚合。 1. **CIDR对应表**:CIDR不再依赖于传统的A、B、C类地址划分,而是使用斜杠“/”后跟一个数字来表示网络部分的位数。例如,192.168....

    IPV4计算器

    描述中提到的“计算方式人性化”,意味着该计算器可能提供了直观和用户友好的界面,帮助用户执行如子网划分、掩码计算、CIDR(Classless Inter-Domain Routing)表示法转换、广播地址和网络地址计算等常见的IPv4操作...

    IPAddress:Java库,用于处理IPv4和IPv6的IP地址和子网

    用于处理IPv4和IPv6的IP地址和子网的库 ,打包为OSGI软件包,打包为和 Maven组ID:com.github.seancfoley Maven工件ID: Maven的版本: , , , 自5.3.1版起的OSGI捆绑包:com.github.seancfoley.ipaddress ...

    country-ip-blocks:CIDR国家级IP数据,直接从区域Internet注册表中获取,每小时更新一次

    IPv4和IPv6范围可用。 直接从AFRINIC,APNIC,ARIN,LACNIC和RIPENCC数据进行编译。 重复数据删除和子网合并以提高效率。 按国家/地区顶级域名(TLD)进行了简化和分类。 CIDR表示法。 每小时更新一次,仅在进行...

    CCNA第4章 IP地址 子网划分 VLSM CIDR

    在IT领域,网络通信是至...总的来说,IP地址、子网划分、VLSM和CIDR是构建和管理网络基础架构的核心概念。理解并熟练运用这些知识,对于网络管理员和IT专业人士来说至关重要,能够确保网络的有效运行和资源的优化利用。

    ip-cidr:使用CIDR的模块

    npm install ip-cidr 关于 用于CIDR的模块(v4,v6)。 基于 。 例子 const IPCIDR = require ( "ip-cidr" ) ; const BigInteger = require ( "jsbn" ) . BigInteger ; const cidr = new IPCIDR ( "50.165.190.0/23...

    ipcheck:超高效的Node.js模块,用于解析和检查IP地址是否在CIDR块中。 支持IPv4和IPv6

    安装npm install ipcheck --save 用法快的为了轻松检查IP和CIDR而没有任何额外的刺激... var IPCheck = require ( 'ipcheck' ) ;IPCheck . match ( '192.168.0.1' , '192.168.0.1/32' ) ; //= true普通的允许您单独...

Global site tag (gtag.js) - Google Analytics