HOST访问限制 支持 IP(单IP,多IP,*通配符,IP段) 域名(单域名,多域名,*通配符)

    /**
     * HOST访问限制 支持 IP(单IP,多IP,*通配符,IP段) 域名(单域名,多域名,*通配符)
     * 根据判断实现IP地址 白名单黑名单
     * @param unknown $host 当前host 127.0.0.2
     * @param unknown $list 允许的host列表 127.0.0.*,192.168.1.1,192.168.1.70,127.1.1.33-127.1.1.100
     * @return boolean
     */
    private  function in_ip($host, $list) {
        $list = ',' . $list . ',';
        $is_in = false;
        // 1.判断最简单的情况
        $is_in = strpos ( $list, ',' . $host . ',' ) === false ? false : true;
        // 2.判断通配符情况
        if (! $is_in && strpos ( $list, '*' ) !== false) {
            $hosts = array ();
            $hosts = explode ( '.', $host );
            // 组装每个 * 通配符的情况
            foreach ( $hosts as $k1 => $v1 ) {
                $host_now = '';
                foreach ( $hosts as $k2 => $v2 ) {
                    $host_now .= ($k2 == $k1 ? '*' : $v2) . '.';
                }
                // 组装好后进行判断
                if (strpos ( $list, ',' . substr ( $host_now, 0, - 1 ) . ',' ) !== false) {
                    $is_in = true;
                    break;
                }
            }
        }
        // 3.判断IP段限制
        if (! $is_in && strpos ( $list, '-' ) !== false) {
            $lists = explode ( ',', trim ( $list, ',' ) );
            $host_long = ip2long ( $host );
            foreach ( $lists as $k => $v ) {
                if (strpos ( $v, '-' ) !== false) {
                    list ( $host1, $host2 ) = explode ( '-', $v );
                    if ($host_long >= ip2long ( $host1 ) && $host_long <= ip2long ( $host2 )) {
                        $is_in = true;
                        break;
                    }
                }
            }
        }
        return $is_in;
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

rorg

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

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

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

打赏作者

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

抵扣说明:

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

余额充值