php实现ip白名单黑名单功能

这个是一个检测ip是否非法的php函数,适应于白名单,黑名单功能开发,主要场景应用于:api来源限制,访问限制等.

代码如下:

/**
 * 安全IP检测,支持IP段检测
 * @param string $ip 要检测的IP
 * @param string|array $ips  白名单IP或者黑名单IP
 * @return boolean true 在白名单或者黑名单中,否则不在
 */
function is_safe_ip($ip="",$ips=""){
    if(!$ip) $ip = get_client_ip();  //获取客户端IP
    if($ips){
        if(is_string($ips)){ //ip用"," 例如白名单IP:192.168.1.13,123.23.23.44,193.134.*.*
            $ips = explode(",", $ips);
        }
    }else{ //读取后台配置 白名单IP
        $obj = new Setting();
        $ips = explode(",", $obj->getConfig("whiteip")); 
    }
    if(in_array($ip, $ips)){
        return true;
    }
    $ipregexp = implode('|', str_replace( array('*','.'), array('\d+','\.') ,$ips)); 
    $rs = preg_match("/^(".$ipregexp.")$/", $ip); 
    if($rs) return true;
    return ;
}

获取ip地址,这里引用thinkphp内置函数

代码如下:

//应网友要求,贴出 get_client_ip() 函数
/**
 * 获取客户端IP地址
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @param boolean $adv 是否进行高级模式获取(有可能被伪装)
 * @return mixed
 */
function get_client_ip($type = 0,$adv=false) {
    $type       =  $type ? 1 : 0;
    static $ip  =   NULL;
    if ($ip !== NULL) return $ip[$type];
    if($adv){
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $pos    =   array_search('unknown',$arr);
            if(false !== $pos) unset($arr[$pos]);
            $ip     =   trim($arr[0]);
        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $ip     =   $_SERVER['HTTP_CLIENT_IP'];
        }elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip     =   $_SERVER['REMOTE_ADDR'];
        }
    }elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}

以上就是本文的全部内容了,希望对大家理解php检测IP有所帮助。

(0)

相关推荐

  • PHP获取ip对应地区和使用网络类型的方法

    本文实例讲述了PHP获取ip对应地区和使用网络类型的方法.分享给大家供大家参考.具体分析如下: 这里测试的时候因为ip168网站禁止,所以试着在原有代码上修改为ip138数据库的数据调用,代码如下: <?php //原程序有问题,现修改为ip138数据库 /** * 获取IP地区 * Enter description here ... * @param unknown_type $ip */ function GetArea($ip){ $url = "http://www.ip138.

  • php判断访问IP的方法

    本文实例讲述了php判断访问IP的方法.分享给大家供大家参考.具体如下: <?php function getIP() { if (! empty ( $_SERVER ["HTTP_CLIENT_IP"] )) { $cip = $_SERVER ["HTTP_CLIENT_IP"]; } else if (! empty ( $_SERVER ["HTTP_X_FORWARDED_FOR"] )) { $cip = $_SERVER [

  • php获取访问者IP地址汇总

    //方法1: $ip = $_SERVER["REMOTE_ADDR"]; echo $ip; //方法2: 复制代码 代码如下: $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $user_IP = ($user_IP) ? $user_IP : $_SERVER["REM

  • PHP curl伪造IP地址和header信息代码实例

    curl虽然功能强大,但是只能伪造$_SERVER["HTTP_X_FORWARDED_FOR"],对于大多数IP地址检测程序来说,$_SERVER["REMOTE_ADDR"]很难被伪造: 首先是client.php的代码 复制代码 代码如下: $headers['CLIENT-IP'] = '202.103.229.40';  $headers['X-FORWARDED-FOR'] = '202.103.229.40';   $headerArr = array

  • php限制ip地址范围的方法

    本文实例讲述了php限制ip地址范围的方法.分享给大家供大家参考.具体如下: 只有在限定范围内的ip地址才能访问 function get_real_ipaddress() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWAR

  • php实现根据IP地址获取其所在省市的方法

    根据现有IP地址获取其地理位置(省份,城市等)的方法 function GetIpLookup($ip = ''){ if(empty($ip)){ return '请输入IP地址'; } $res = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip); if(empty($res)){ return false; } $jsonMatches = array(

  • PHP实现获取客户端IP并获取IP信息

    代码很简洁,功能很实用,这里就不多废话了,直接奉上: 复制代码 代码如下: <?php /**  * 获取客户端IP  * @param  integer $type 返回类型 0:string,1:long  * @return string|long  */ function getClientIp($type = 0) {     $ip = NULL;     if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {         $arr = ex

  • PHP判断IP并转跳到相应城市分站的方法

    本文实例讲述了PHP判断IP并转跳到相应城市分站的方法.分享给大家供大家参考.具体实现方法如下: <?php class QQWry{ var $StartIP=0; var $EndIP=0; var $Country=''; var $Local=''; var $CountryFlag=0; // 标识 Country位置 // 0x01,随后3字节为Country偏移,没有Local // 0x02,随后3字节为Country偏移,接着是Local // 其他,Country,Local

  • php简单实现屏蔽指定ip段用户的访问

    这段时间在统计工具里面总是看到一些未知浏览器.未知操作系统的用户的频繁请求而且ip都在一个段里面,使我产生了一些疑问,这些用户算是有效用户吗.网站访问没有浏览器没有操作系统的记录,我经过几天的分析确认这些访问不是人在访问而是一些机器或者是别人在采集我的站内的东西,萌生了一种屏蔽这个ip的想法. 把统计里面的没有浏览器记录的用户数据导出来看了下屏蔽ip已经不现实了ip不少一百多个,但是仔细观看不难看出这些ip都集中在某些ip断内.想个办法屏蔽整个ip段的用户,也许会造成一些误杀但是能确保网站流量是

  • php实现ip白名单黑名单功能

    这个是一个检测ip是否非法的php函数,适应于白名单,黑名单功能开发,主要场景应用于:api来源限制,访问限制等. 复制代码 代码如下: /**  * 安全IP检测,支持IP段检测  * @param string $ip 要检测的IP  * @param string|array $ips  白名单IP或者黑名单IP  * @return boolean true 在白名单或者黑名单中,否则不在  */ function is_safe_ip($ip="",$ips="&q

  • Android基于AudioManager、PhoneStateListener实现设置黑名单功能

    本文实例讲述了Android基于AudioManager.PhoneStateListener实现设置黑名单功能.分享给大家供大家参考,具体如下: 手机中一般有设置黑名单的功能.此例通过设置电话黑名单,当黑名单中的电话打来时,手机铃声为变成静音. 程序代码如下: import android.app.Activity; import android.content.Context; import android.media.AudioManager; import android.os.Bund

  • nginx设置目录白名单、ip白名单的实现方法

    1.设置目录白名单:对指定请求路径不设置限制,如对请求路径为api目录下的请求不做限制,则可写为 server{ location /app { proxy_pass http://192.168.1.111:8095/app; limit_conn conn 20; limit_rate 500k; limit_req zone=foo burst=5 nodelay; } location /app/api { proxy_pass http://192.168.1.111:8095/app

  • Linux服务器配置ip白名单防止远程登录以及端口暴露的问题

    前言 博主用的服务器是阿里云购买的,其实阿里云已经提供安全策略共给我们使用了,但是如果是公司自己的服务器,或者是我们自己的虚拟机等.还是需要自己看看配置好防火墙和如何配置白名单的. 1.阿里云的服务器,本身并没有防火墙,但是我们可以安装一个IPtable防火墙(这里阿里云的服务器系统为Centos),这样的话,就需要防火墙和阿里云网址配置的白名单同时生效才可以喽. 1.服务器防火墙 1.1.下面这个是初始化的防火墙配置 vim /etc/sysconfig/iptables # sample c

  • golang接口IP限流,IP黑名单,IP白名单的实例

    增加中间件 可以选择普通模式和LUA脚本模式,建议选择普通模式,实际上不需要控制的那么精确. package Middlewares import ( "github.com/gin-gonic/gin" "strconv" "time" "voteapi/pkg/app/response" "voteapi/pkg/gredis" "voteapi/pkg/util" ) const

  • nginx配置IP白名单的详细步骤

    目录 1.添加IP白名单文件 2.配置nginx.conf 3.编辑白名单的提示导航页面 补充:添加白名单后nginx报错: 总结 分析nginx访问日志,有哪些IP访问过nginx. 命令参考:awk '{print $1}' logs/access.log | sort | uniq -c | sort -nr -k1 输出的效果案例: 1053 192.168.3.15893 192.168.3.10818 192.168.0.8 1.添加IP白名单文件 在nginx目录的 conf 中添

  • Python实现获取nginx服务器ip及流量统计信息功能示例

    本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能.分享给大家供大家参考,具体如下: #!/usr/bin/python #coding=utf8 log_file = "/usr/local/nginx/logs/access.log" with open(log_file) as f: contexts = f.readlines() # define ip dict### ip = {} # key为ip信息,value为ip数量(若重复则只增加数量) fl

  • Shell脚本实现自动修改IP、主机名等功能分享

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名在维护和管理方面也比较方便.如下脚本用途为:修改ip和主机名等相关信息,可以根据实际需求修改,举一反三! 复制代码 代码如下: #!/bin/sh  #auto Change ip netmask gateway scripts  #wugk 2012-12-17  cat <<EOF +++++

  • 浅谈PostgreSQL的客户端认证pg_hba.conf

    大家都知道防火墙主要是用来过滤客户端并保护服务器不被恶意访问攻击,那在pg中同样存在一个类似于防火墙的工具用来控制客户端的访问,也就是pg_hba.conf这个东东. 在initdb初始化数据文件时,默认提供pg_hba.conf. 通过配置该文件,能够指定哪些ip可以访问,哪些ip不可以访问,以及访问的资源和认证方式,该文件类似于oracle中的监听中的白名单黑名单功能,且同样可以reload在线生效. 记录可以是下面七种格式之一: local database user auth-metho

  • nginx动态添加访问白名单的方法

    本文实现的功能是:网站启用访问白名单,对于不在白名单中又需要访问的客户,只需打开一个不公开的网址,然后自动获得2小时的访问权限,时间达到后自动删除访问权限 实现此功能需要以下几个步骤: nginx启用访问白名单 客户打开指定网址自动添加访问白名单 为网址添加简单的认证 每两个小时自动恢复默认白名单,删除临时IP访问权限 一.nginx配置访问白名单 这个就比较简单了,简单贴一下配置: ............nginx.conf........... geo $remote_addr $ip_w

随机推荐