• Java 判断两个IP段是否有交集


    Java 判断两个IP段是否有交集


    背景介绍

    在有些场景,需要判断IP段是否有交集,比如:配置一些设备的过滤规则,避免IP段重复配置,需要做IP段是否重叠的校验。

    IP段有交集的场景有几种:

    1)IP段1包含IP段2;

    2)IP段2包含IP段1;

    3)IP段1的起始IP与IP段2的结束IP相同,或者IP段1的结束IP与IP段2的起始IP相同;

    4)IP段1和IP段2单纯的相交。

    Java实现

    代码如下:

    /**
     * @author Miracle Luna
     * @date 2021/1/26
     */
    public class IpUtil {
    
        /**
         * 判断两个IP段是否相交
         * @param ipRange1 IP段1
         * @param ipRange2 IP段2
         * @return 是否相交
         */
        public static boolean ipRange1IntersectIpRange2(String ipRange1, String ipRange2) {
            String beginIp1 = ipRange1.split("-")[0];
            String endIp1 = ipRange1.split("-")[1];
    
            String beginIp2 = ipRange2.split("-")[0];
            String endIp2 = ipRange2.split("-")[1];
    
            return getIp2Long(endIp1) >= getIp2Long(beginIp2) && getIp2Long(endIp2) >= getIp2Long(beginIp1);
        }
    
        /**
         * 将IP转换为Long类型
         * @param ip 待转换的IP
         * @return 转换为Long后的值
         */
        public static long getIp2Long(String ip) {
            // 去除空格
            ip = ip.trim();
            long ip2Long = 0L;
    
            String[] ipSplits = ip.split("\.");
            for (String ipSplit : ipSplits) {
                ip2Long = ip2Long << 8 | Integer.parseInt(ipSplit);
            }
    
            return ip2Long;
        }
    
        public static void main(String[] args) {
            String ipRange1 = "192.168.166.10-192.168.166.216";
            String ipRange2 = "192.168.166.100-192.168.166.218";
    
            System.out.println("==> ipRange1IntersectIpRange2: " + ipRange1IntersectIpRange2(ipRange1, ipRange2));
        }
    }

    运行结果如下:

    ==> ipRange1IntersectIpRange2: true
  • 相关阅读:
    快速幂求模
    elasticSearch入门
    springboot 停止
    gson
    jetty 入门
    redis工具
    oracle数据库操作
    Spring事务控制和回滚
    SPI
    PLSQLDeveloper_免安装自带client
  • 原文地址:https://www.cnblogs.com/miracle-luna/p/15212881.html
Copyright © 2020-2023  润新知