java判断ip是否为指定网段

具体网络知识原理请看这个博文

java 复制代码
    /***
     * @param address servletRequest.getRemoteAddr();
     * @param host servletRequest.getRemoteHost();
     * @return
     * Description 检验IP是否符合安全限定
     */
    private  boolean ipIsInNet(String address, String host){
        Set<String> iPset = allowedIP.setAllowedIPValues().getAllowedIP();
        if(iPset.contains(address) || iPset.contains(host)){
            return true;
        }
        String[] ipItems = host.split("\\.");
        if(ipItems.length!=4) return false;
        for(String addr:iPset){
            if(addr.indexOf("/")<0) continue;
            long ipAddress = (Long.parseLong(ipItems[0])<<24)|(Long.parseLong(ipItems[1])<<16)
                    |(Long.parseLong(ipItems[2])<<8)|Long.parseLong(ipItems[3]);
            int type = Integer.parseInt(addr.replaceAll(".*/", ""));
            long mask = 0xFFFFFFFF << (32 - type);
            String cidrIp = addr.replaceAll("/.*", "");
            String[] ipChildItems = cidrIp.split("\\.");
            long childIpAddress = (Long.parseLong(ipChildItems[0])<<24)|(Long.parseLong(ipChildItems[1])<<16)
                    |(Long.parseLong(ipChildItems[2])<<8)|Long.parseLong(ipChildItems[3]);
            if((ipAddress & mask)==(childIpAddress & mask)) return true;
        }
        return false;
    }
相关推荐
程序员龙叔7 小时前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
NE_STOP9 小时前
Vide Coding--AI编程工具的选择
java
用户83562907805110 小时前
使用 Python 操作 Word 内容控件
后端·python
码云数智-园园10 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆10 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
小宇宙Zz10 小时前
Maven依赖冲突
java·服务器·maven
swordbob10 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯11 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
十五喵源码网11 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记