php限制IP和IP段的代码(白名单)

征集了二种常用的掩盖的ip列表的程序管理方法,屏蔽部分IP那样可以让您的网址越来越好,更稳固了,上面大家不来解析上面包车型地铁掩盖

上边小编是访谈了两种常用的屏蔽的ip列表的程序管理方法,屏蔽那样能够让您的网址越来越好,更安宁了,上面大家不来深入分析上边包车型大巴隐藏措施吧.

段代码是自家在英特网搜相关解决措施时搜到的,这些类的makePregIP函数逻辑有一些难点,小编改进了下得以行使了。那么些类得效果是同意白名单中的IP地址寻访,即使要落到实处节制黑名单中的IP地址访谈,轻易改革下checkIP函数中的代码逻辑就足以了。

上边笔者是访谈了三种常用的屏蔽的ip列表的程序管理方法,屏蔽那样能够令你的网址更加好,更牢固了,上边大家不来分析下边包车型大巴遮挡措施吧.

$ip_str = “127.0.0.1,192.1.1.*,202.*,127.*,123.*,142.*,*”;
$ip = “127.0.0.254”;
function StopIp($ip,$ip_str)
{
    if(strcmp(long2ip(sprintf(‘%u’,ip2long($ip卡塔尔卡塔尔卡塔尔(قطر‎,$ip卡塔尔(قطر‎卡塔尔国return
false;//验证ip假诺不是ip格式就重返假
    $ip = explode(“.”,$ip);
   
if(eregi(“(,*,|,*.|,*)|(“.$ip[0].”.(“.$ip[1].”|*).?(“.$ip[2].”|*)?.?(“.$ip[3].”|*)?)”,”,”.$ip_str.”,”))return
true;
}
if(StopIp($ip,$ip_str))echo 1;

动用办法

$ip_str = 127.0.0.1,192.1.1.*,202.*,127.*,123.*,142.*,*;$ip =
127.0.0.254; function StopIp($ip,$ip_str卡塔尔国{
if(strcmp(long2ip(sprintf(‘%u’,ip2long($ip卡塔尔卡塔尔卡塔尔国,$ip卡塔尔(قطر‎卡塔尔(قطر‎return
false;//验证ip假设不是ip格式就回到假 $ip = explode(.,$ip卡塔尔(قطر‎;
if(eregi((,*,|,*.|,*)|(.$ip[0]..(.$ip[1].|*).?(.$ip[2].|*)?.?(.$ip[3].|*)?),,.$ip_str.,))return
true;}if(StopIp($ip,$ip_str))echo 1;

function StopIp($ip,$ip_str)
{
        if(strcmp(long2ip(sprintf(‘%u’,ip2long($ip卡塔尔(قطر‎卡塔尔国卡塔尔国,$ip卡塔尔国卡塔尔(قطر‎return
false;//验证ip即使不是ip格式就回去假
        $ip = explode(“.”,$ip);
       
if(eregi(“(,*,|,*.|,*)|,(“.$ip[0].”.(“.$ip[1].”|*).?(“.$ip[2].”|*)?.?(“.$ip[3].”|*),?)”,”,”.$ip_str.”,”))return
true;
}

 代码如下

function StopIp($ip,$ip_str卡塔尔(قطر‎{
if(strcmp(long2ip(sprintf(‘%u’,ip2long($ip卡塔尔国卡塔尔卡塔尔国,$ip卡塔尔国State of Qatarreturn
false;//验证ip就算不是ip格式就回来假 $ip = explode(.,$ip卡塔尔(قطر‎;
if(eregi((,*,|,*.|,*)|,(.$ip[0]..(.$ip[1].|*).?(.$ip[2].|*)?.?(.$ip[3].|*),?),,.$ip_str.,))return
true;}

function StopIp($ip,$str)
{
    if(stristr(“,”.$str.”,”,$ip卡塔尔(قطر‎卡塔尔return true;//要是在在范围内就不相同意
    if(stristr(“,”.$str.”,”,”,*,”) ||
stristr(“,”.$str.”,”,”,*”卡塔尔卡塔尔(قطر‎return true;//如若第二回面世,*. 或者 ,*
表示具备站点都差异意
    $iplist = explode(“,”,$str);
    $ip = explode(“.”,$ip);
    for($i = 0;$i<count($iplist);$i++)
    {
       
if(eregi($ip[0].”.(“.$ip[1].”|*).?(“.$ip[2].”|*)?.?(“.$ip[3].”|*)?”,$iplist[$i]))return
true;
    }
}
//测试
$ip_str =
“127.0.0.1,192.1.1.*,202.*,127.*,123.*”;//这么些是遮挡的ip列表
以”,”隔绝,假使要屏蔽全体ip请用* 假设想屏蔽127.起来的ip格式为 127.*
$ip = “137.0.0.2”; //必要表达的Ip
if(StopIp($ip,$ip_str))echo 1;

$allow_ip =
array(“192.168.1.1″,”210.10.2.1-20″,”222.34.4.*”,”127.0.0.1″);
 
$oBlock_ip = new allowIp($allow_ip);
if( !$oBlock_ip->checkIP() ){
  echo ‘您的IP为:’;
  echo $oBlock_ip->ip;
  exit(‘制止访谈’State of Qatar;
}

function StopIp($ip,$strState of Qatar{ if(stristr(,.$str.,,$ip卡塔尔(قطر‎卡塔尔return
true;//假若在在范围内就不许 if(stristr(,.$str.,,,*,) ||
stristr(,.$str.,,,*卡塔尔国卡塔尔return true;//即使第二次面世,*. 或者 ,*
表示具备站点都不容许 $iplist = explode(,,$str卡塔尔(قطر‎; $ip = explode(.,$ip卡塔尔;
for($i = 0;$icount($iplist卡塔尔国;$i++卡塔尔(قطر‎ {
if(eregi($ip[0]..(.$ip[1].|*).?(.$ip[2].|*)?.?(.$ip[3].|*)?,$iplist[$i]))return
true; }}//测试$ip_str =
127.0.0.1,192.1.1.*,202.*,127.*,123.*;//那个是掩没的ip列表
以,隔断,假使要屏蔽全体ip请用* 如若想屏蔽127.方始的ip格式为 127.*$ip =
137.0.0.2; //需求证实的Ipif(StopIp($ip,$ip_str))echo 1;

for($i=1;$i<=255;$i++)
{
for($k=1;$k<=255;$K++)
{
for($a=1;$a<=255;$a++)
{
$str .= “192.{$i}.{$k}.{$a}”;
}
}
}
那般就能够生育 255*255*255 一点都不小的Ip数据量了

allowIP类文件

for($i=1;$i=255;$i++卡塔尔(قطر‎{for($k=1;$k=255;$K++卡塔尔(قطر‎{for($a=1;$a=255;$a++State of Qatar{$str
.= 192.{$i}.{$k}.{$a};}}}那样就能够生育 255*255*255 超大的Ip数据量了

 代码如下

class allowIp {
 
    function __construct($allow_ip){
        if (empty($allow_ip)) {
          return false;
        }
        $this->allow_ip = $allow_ip;
        $this->ip = ”;
 
    }
 
    private function makePregIP($str)
    { 
        if (strstr($str,”-“)) {
 
            $aIP =
explode(“.”,$str);
 
            foreach ($aIP as
$k=>$v) {
                if (!strstr($v,”-“)) {
                    $preg_limit .= $this->makePregIP($v);
                    $preg_limit .= “.”;
                } else{
                    $aipNum = explode(“-“,$v);
                    for($i=$aipNum[0];$i<=$aipNum[1];$i++){
                        $preg .=$preg?”|”.$i:”[“.$i;
                    }
                    $preg_limit
.=strrpos($preg_limit,”.”,1)==(strlen($preg_limit)-1)?$preg.”]”:”.”.$preg.”]”;
                }
            }
        }
        else {
            $preg_limit = $str;
        }
 
        return $preg_limit;
    }
 
    private function getAllBlockIP(){
        if ($this->allow_ip) {
            $i = 1;
            foreach ($this->allow_ip as $k=>$v) {
                $ipaddres = $this->makePregIP($v);
 
                $ip = str_ireplace(“.”,”.”,$ipaddres);
                $ip = str_replace(“*”,”[0-9]{1,3}”,$ip);
                $ipaddres = “/”.$ip.”/”;
                $ip_list[] = $ipaddres;
                $i++;
            }
        }
        return $ip_list;
    }
 
    public function checkIP() {
        $iptable = $this->getAllBlockIP();
        $IsJoined = false;
        //获得顾客ip
        $Ip = $this->get_client_ip();
        $Ip = trim($Ip);
        //在白名单中
        if ($iptable) {
            foreach($iptable as $value) {
                if
(preg_match(“{$value}”,$Ip))
{
                    $IsJoined = true;
                    break;
                }
            }
        }
        //不在白名单中
        if( !$IsJoined ){
            return false;
        }
        return true; 
    }
 
    private function get_client_ip(){
        if (getenv(“HTTP_CLIENT_IP”) &&
strcasecmp(getenv(“HTTP_CLIENT_IP”), “unknown”))
            $ip = getenv(“HTTP_CLIENT_IP”);
        else if (getenv(“HTTP_X_FORWARDED_FOR”) &&
strcasecmp(getenv(“HTTP_X_FORWARDED_FOR”), “unknown”))
            $ip = getenv(“HTTP_X_FORWARDED_FOR”);
        else if (getenv(“REMOTE_ADDR”) &&
strcasecmp(getenv(“REMOTE_ADDR”), “unknown”))
            $ip = getenv(“REMOTE_ADDR”);
        else if (isset($_SERVER[‘REMOTE_ADDR’]) &&
$_SERVER[‘REMOTE_ADDR’] && strcasecmp($_SERVER[‘REMOTE_ADDR’],
“unknown”))
            $ip = $_SERVER[‘REMOTE_ADDR’];
        else
            $ip = “unknown”;
        $this->ip = $ip;
        return($ip);
   }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注