禁止单个IP或ip段访问

复制代码
    //IP禁止判断接口,返回true则为找到
    function checkIp($ip, $ipbanned)
    {
        $ipbannedFlag = false;
        if (!empty($ipbanned)) {
            foreach ($ipbanned as $data) {
                if (strpos($data, '*')) {
                    $ip_min = convert_ip("min", $data);
                    $ip_max = convert_ip("max", $data);
                    $result = ipforbidden($ip, $ip_min, $ip_max);
                    if ($result == 1) {
                        //找到
                        $ipbannedFlag = true;
                        break;
                    }
                } else {
                    if ($ip == $data) {
                        //找到
                        $ipbannedFlag = true;
                        break;
                    }
                }
            }
        }
        return $ipbannedFlag;
    }

    function convert_ip($op, $ip)
    {
        $arr_ip = explode(".", $ip);
        $arr_temp = array();
        $i = 0;
        $result = '';
        $ip_val = $op == "max" ? "255" : "1";
        foreach ($arr_ip as $key => $val) {
            $i++;
            $val = $val == "*" ? $ip_val : $val;
            $arr_temp[] = $val;
        }
        for ($i = 4 - $i; $i > 0; $i--) {
            $arr_temp[] = $ip_val;
        }
        $comma = "";
        foreach ($arr_temp as $v) {
            $result .= $comma . $v;
            $comma = ".";
        }
        return $result;
    }

    //判断IP是否被限并返回
    function ipforbidden($ip, $ip_from, $ip_to)
    {
        $from = strcmp(ip2long($ip), ip2long($ip_from));
        $to = strcmp(ip2long($ip), ip2long($ip_to));
        if ($from >= 0 && $to <= 0) {
            return 1;
        } else {
            return 0;
        }
    }

  
复制代码
复制代码
    //使用方法
        $ipbanned = [
            '61.135.165.*',
            '61.135.186.*',
            '127.0.0.1',
        ];
        $user_ip = '127.0.0.1';
        $result = checkIp($user_ip, $ipbanned);
        if ($result) exit('禁止访问');
复制代码

 

posted @   一个人的孤独自白  阅读(1314)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示