`

同时效验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格式第一批

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

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

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

    中国的各省IP地址库CIDR格式第三批数据的发布,无疑将进一步推动中国网络空间管理的现代化进程,同时也为各地区的网络服务提供商和相关企业提供了宝贵的数据资源。通过利用这些数据,各相关方能够更好地优化网络服务...

    解析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