PHP 黑白名单IP验证 支持通用泛滥字符*

以下是PHP代码

<?php
//check_ip_h(array('113.68.238.*'),array('113.68.238.126'));//示例用法 全部留空不启用验证

/**
 * 检测访问的ip是否为规定的允许的ip 【黑名单】
 * $check_ip   :array 黑名单ip [可空]
 * $check_ip_b :array 白名单ip [可空]
 * $IP         :text 进入IP [可空]
 * $exit       :strict true=终止运行 默认true [可空]
 */
function check_ip_h($check_ip=false,$check_ip_b=false,$IP=false,$exit=true){
    if($check_ip===false){
        return false;
    }
    
    if(!$IP) $IP=isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"]:(isset($_SERVER["HTTP_CLIENT_IP"])?$_SERVER["HTTP_CLIENT_IP"]:$_SERVER["REMOTE_ADDR"]);
    
    if($check_ip_b!==false){
        $baimingdan_ip=check_ip_b($check_ip_b);
    }
    if(!$baimingdan_ip){
        $check_ip_arr= explode('.',$IP);//要检测的ip拆分成数组
        #限制IP
        foreach ($check_ip as $val){
            if(strpos($val,'*')!==false){//发现有*号替代符
                $arr=array();
                $arr=explode('.', $val);
                $bl=true;//用于记录循环检测中是否有匹配成功的
                for($i=0;$i<4;$i++){
                    if($arr[$i]!='*'){//不等于* 就要进来检测,如果为*符号替代符就不检查
                        if($arr[$i]!=$check_ip_arr[$i]){
                            $bl=false;
                            break;//终止检查本个ip 继续检查下一个ip
                        }
                    }
                }//end for 
                if($bl){//如果是true则找到有一个匹配成功的就返回
                    header('HTTP/1.1 403 Forbidden');
                    echo "Access forbidden";
                    if($exit===true){
                        exit;
                    }else{
                        return;
                    }
                }
            }
        }
        if(in_array($IP,$check_ip)){
            header('HTTP/1.1 403 Forbidden');
            echo "Access forbidden";
            if($exit===true){
                exit;
            }else{
                return;
            }
        }
    }
}

/**
 * 检测访问的ip是否为规定的允许的ip 【白名单】
 * $check_ip :白名单ip [必填]
 * $IP       :进入IP [可空]
 * return true=找到白名单 false=没在白名单
 */
function check_ip_b($check_ip,$IP=false){
    if(!$IP) $IP=isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"]:(isset($_SERVER["HTTP_CLIENT_IP"])?$_SERVER["HTTP_CLIENT_IP"]:$_SERVER["REMOTE_ADDR"]);
    
    $check_ip_arr= explode('.',$IP);//要检测的ip拆分成数组
    if(!is_array($check_ip)){
        $check_ip = [
            0=>$check_ip
        ];
    }
    #限制IP
    foreach ($check_ip as $val){
        if(strpos($val,'*')!==false){//发现有*号替代符
            $arr=array();
            $arr=explode('.', $val);
            $bl=true;//用于记录循环检测中是否有匹配成功的
            for($i=0;$i<4;$i++){
                if($arr[$i]!='*'){//不等于* 就要进来检测,如果为*符号替代符就不检查
                    if($arr[$i]!=$check_ip_arr[$i]){
                        $bl=false;
                        break;//终止检查本个ip 继续检查下一个ip
                    }
                }
            }//end for 
            if($bl){//如果是true则找到有一个匹配成功的就返回
                return true;
            }
        }
    }
    if(in_array($IP,$check_ip)){
        return true;
    }
    return false;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧人站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值