`
cobble19
  • 浏览: 107080 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Java验证IP和MAC地址

    博客分类:
  • Java
阅读更多
ip匹配
     /**
     * 验证requestIp是否匹配bindIp,匹配返回true,否则返回false
     * @param bindIp 绑定的IP
     * @param requestIp 待验证的IP,即登录IP
     * @return
     * @throws Exception
     */
    public boolean validBindIp(String bindIp, String requestIp) throws Exception {
        //无绑定IP,则所有IP都是正确的。
        if (StringUtils.isEmpty(bindIp)) {
            return true;
        }

        if (StringUtils.isEmpty(requestIp)) {
            return false;
        }
        //是否绑定的标志,true为2个IP匹配,false为不匹配。
        boolean validBindIp = true;
        //split 函数需要的参数是正则表达式,【.】在正则表达式有特殊含义,所以要转义。
        String[] bindIpSplits = bindIp.split("\\.");
        String[] requestIpSplits = requestIp.split("\\.");
        int bindIpSplitsLength = bindIpSplits.length;
        int requestIpSplitsLength = requestIpSplits.length;
        int minLength = bindIpSplitsLength < requestIpSplitsLength ? bindIpSplitsLength : requestIpSplitsLength;

        for (int i = 0; i < minLength; i++) {
            //标志为false,则跳出循环。
            if (!validBindIp) {
                break;
            }
            //"*"匹配所有
            if (bindIpSplits[i].indexOf("*") != -1) {
                continue;
            }
            //对应的值是否相等。如果不等,则绑定标志置为false。
            if (!requestIpSplits[i].equals(bindIpSplits[i])) {
                validBindIp = false;
            }
        }

        return validBindIp;
    }

    public boolean validBindIp(String[] bindIps, String requestIp) throws Exception {
        if (bindIps == null || bindIps.length == 0) {
            return true;
        }
        if (StringUtils.isEmpty(requestIp)) {
            return false;
        }
        boolean validBindIp = false;
        for (String bindIp : bindIps) {
            //如果有一个符合,则比较完成,退出循环,返回true。
            if (validBindIp) {
                break;
            }
            validBindIp = this.validBindIp(bindIp, requestIp);
        }
        return validBindIp;
    }

    public boolean validBindIp(String bindIpsWithSeparator, String requestIp, String separator) throws Exception {
        if (StringUtils.isEmpty(bindIpsWithSeparator)) {
            return true;
        }
        if (StringUtils.isEmpty(requestIp)) {
            return false;
        }
        if (StringUtils.isEmpty(separator)) {
            separator = ",";
        }
        String[] bindIps = bindIpsWithSeparator.split(separator);
        return this.validBindIp(bindIps, requestIp);
    }


mac地址匹配
     /**
     * 验证requestMac是否匹配bindMac,若匹配返回true,否则返回false
     * @param bindMac 绑定的物理地址
     * @param requestMac 待验证的物理地址
     * @return
     * @throws Exception
     */
    public boolean validBindMac(String bindMac, String requestMac) throws Exception {
        //无绑定MAC,则所有MAC都是正确的。
        if (StringUtils.isEmpty(bindMac)) {
            return true;
        }

        if (StringUtils.isEmpty(requestMac)) {
            return false;
        }
        //是否绑定的标志,true为2个MAC匹配,false为不匹配。
        boolean validBindMac = true;
        
        String[] bindMacSplits = bindMac.split("-");
        String[] requestMacSplits = requestMac.split("-");
        int bindMacSplitsLength = bindMacSplits.length;
        int requestMacSplitsLength = requestMacSplits.length;
        int minLength = bindMacSplitsLength < requestMacSplitsLength ? bindMacSplitsLength : requestMacSplitsLength;

        for (int i = 0; i < minLength; i++) {
            //标志为false,则跳出循环。
            if (!validBindMac) {
                break;
            }
            //"*"匹配所有
            if (bindMacSplits[i].indexOf("*") != -1) {
                continue;
            }
            //对应的值是否相等。如果不等,则绑定标志置为false。
            if (!requestMacSplits[i].equalsIgnoreCase(bindMacSplits[i])) {
                validBindMac = false;
            }
        }

        return validBindMac;
    }

    public boolean validBindMac(String[] bindMacs, String requestMac) throws Exception {
        if (bindMacs == null || bindMacs.length == 0) {
            return true;
        }
        if (StringUtils.isEmpty(requestMac)) {
            return false;
        }
        boolean validBindMac = false;
        for (String bindMac : bindMacs) {
            //如果有一个符合,则比较完成,退出循环,返回true。
            if (validBindMac) {
                break;
            }
            validBindMac = this.validBindMac(bindMac, requestMac);
        }
        return validBindMac;
    }

    public boolean validBindMac(String bindMacsWithSeparator, String requestMac, String separator) throws Exception {
        if (StringUtils.isEmpty(bindMacsWithSeparator)) {
            return true;
        }
        if (StringUtils.isEmpty(requestMac)) {
            return false;
        }
        if (StringUtils.isEmpty(separator)) {
            separator = ",";
        }
        String[] bindMacs = bindMacsWithSeparator.split(separator);
        return this.validBindMac(bindMacs, requestMac);
    }


说明:StringUtils来自import org.apache.commons.lang.StringUtils;
分享到:
评论
1 楼 safda1 2017-10-18  
没明白为什么要把mac进行分段比较呢?

相关推荐

    java 获取客户端ip mac地址

    ### Java 获取客户端 IP 和 MAC 地址 在Java Web开发中,有时我们需要获取客户端的IP地址甚至是MAC地址,以便进行安全验证、用户行为追踪等操作。本文将详细介绍如何通过Java来实现这一功能。 #### 一、获取客户端...

    java获取客户端ip及mac地址

    ### Java 获取客户端 IP 地址 在 Web 开发中,获取客户端 IP 地址是一项非常重要的功能,尤其是在需要记录用户活动、实现地理位置定位...以上就是关于如何在 Java 中获取客户端 IP 地址及 MAC 地址的相关知识点介绍。

    Java获取客户端IP及Mac地址(同网段).rar

    Java,运用了多线程内部执行,不影响其他登录验证操作。在Controller类获取客户端的IP地址的方法是:request....所以我们这里添加了条件验证,将客户端IP及Mac地址(同网段)与本地本地IP及Mac地址方法分开。

    ip、mac标准格式转换工具(java)

    总的来说,`ip、mac标准格式转换工具(java)`是一个帮助程序员在Java环境中高效处理IP和MAC地址的实用工具。通过理解这些基本概念并熟练运用这些工具类,开发者可以更轻松地应对涉及网络通信的编程挑战。

    用java实现获取MAC地址的方法

    ### 使用Java实现获取MAC地址的方法 #### 背景与目的 在计算机网络管理或安全领域,有时需要获取远程主机的MAC地址来进行设备识别或跟踪。本文将介绍一种使用Java编程语言来实现获取本地或远程计算机MAC地址的方法...

    获取本地IP地址的小程序

    通过学习和理解这个小程序,开发者不仅可以掌握如何在Java中获取IP地址,还能进一步探讨网络编程的基础,包括异常处理、网络接口遍历等技术。同时,这种开源和分享的精神也是IT社区的重要组成部分,促进大家共同进步...

    网络mac 与ip交换机绑定

    通过这些类,我们可以编写程序来实现MAC与IP的绑定和验证。 交换机在绑定MAC和IP的过程中起着关键作用。静态MAC/IP绑定是一种安全措施,它可以防止非法设备冒充合法设备接入网络。当交换机配置了MAC/IP绑定,只有...

    Java 获取本机的IP与MAC地址实现详解

    在Java编程中,获取本机的IP地址和MAC地址是常见的网络编程需求。这些信息对于网络通信、设备识别以及安全验证等场景尤为重要。本文将详细解释如何使用Java来获取本机的IP地址和MAC地址,并分析相关代码实现。 首先...

    仿Windows的IP和MAC输入框

    本文将深入探讨如何使用Swing来实现仿Windows风格的IP和MAC地址输入框。 IP地址和MAC地址是网络通信中的关键概念。IP地址(Internet Protocol address)是互联网上的设备的唯一标识,而MAC地址(Media Access ...

    根据mac地址生成服务器唯一机器码

    总的来说,基于MAC地址生成服务器唯一机器码是一种常见的服务器身份验证方法,它依赖于MAC地址的唯一性,可以有效防止非法复制和滥用。然而,这种方法也有其局限性,比如虚拟化环境下的MAC地址可变性,以及隐私保护...

    pb获取网卡ip及mac

    标题中的“pb获取网卡ip及mac”指的是使用PowerBuilder(PB)开发的程序,用于获取计算机网络接口控制器(NIC,通常称为网卡)的IP地址和物理地址(MAC地址)。在IT领域,理解如何通过编程获取这些网络信息是至关...

    jsp获取浏览者真实IP地址方法

    若存在,则获取并返回该字段中的第一个有效IP地址,剔除可能的空格和“unknown”标记。 ##### 方法二:全面版实现 考虑到不同类型的代理服务器可能会使用不同的HTTP头部字段来传递客户端IP信息,更全面的实现应...

    获取网卡MAC地址 获取网卡MAC地址

    在编程环境中,如Python、Java、C#等,也有相应的库函数或API可以用来获取MAC地址,比如Python的`uuid.getnode()`函数,Java的`java.net.NetworkInterface`类等。 需要注意的是,有些网络设备或虚拟机可能会使用...

    IPhelper 库调用

    这些函数帮助开发者获取和设置网络配置,例如,获取本机的IP地址、MAC地址,查询网络连接状态等。 2. **主要功能**: - **IP地址管理**:包括获取、设置和修改主机的IPv4和IPv6地址。 - **网络接口信息**:获取...

    E7段获取远程主机MAC地址的方法与java实现宣贯.pdf

    这样的Java程序可以作为网络监控工具的一部分,帮助网络管理员远程获取并跟踪设备的MAC地址,从而更好地管理和维护网络环境。 总结: 本文探讨了跨网段获取远程主机MAC地址的问题,指出SendARP方法的局限性,并...

    基于SpringBoot校验license

    本项目"基于SpringBoot校验license"旨在帮助开发者创建一个能够进行多维度许可验证的系统,包括MAC地址校验、IP地址校验、CPU和主板序列号校验以及注册账号数的限制。 首先,我们来看MAC地址校验。MAC地址是网络...

    对主机的mac地址MD5加密

    - **设备身份验证**:在物联网等场景下,可以利用加密后的MAC地址来验证设备的身份。 #### 七、总结 通过对主机MAC地址进行MD5加密,不仅可以增强网络通信的安全性,还能有效防止数据被非法窃取或篡改。在实际应用...

    Java web License 保护我们的java项目

    web系统Licence验证 保证java web ,可以现在IP,mac,自定义参数,License生成器 (JAVA源码+界面) 其中包括license授权机制的原理和制作license的具体步骤 增加了mac 地址验证

    java web springboot License生成器 (JAVA源码+图形界面)

    保证java web ,spirngboot,tomcate web安全,可以现在IP,mac,自定义参数,License生成器 (JAVA源码+界面) 其中包括license授权机制的原理和制作license的具体步骤 增加了mac 地址验证

    Java实现的(软件或网络)实验室的Web签到系统,签到原理基于IP和座位的(强制)对应关系。.zip

    Java实现的Web签到系统是用于管理实验室的一种高效工具,其核心原理是通过结合IP地址与实验室座位的对应关系来确保签到的准确性和强制性。在这个系统中,每个学生在进入实验室时,其设备的IP地址将被系统捕获,并与...

Global site tag (gtag.js) - Google Analytics