Heim > php教程 > php手册 > 对IP及IP段进行访问限制

对IP及IP段进行访问限制

WBOY
Freigeben: 2016-06-21 08:57:51
Original
1266 Leute haben es durchsucht

本来是写了几个函数,IP黑名单是记到库里的,为了方便理解,改成了一个class把IP黑名单写了出来。

192.168.1.1 单个IP
192.168.1.*      这样代理   192.168.1.1-192.168.1-255
192.158.1.2-20 这样是代表192.158.1.2-192.158.1.20
也可以这样写  192.168.1.[1|2|3]

嘿嘿~一个方法不知道想法是否周全,拿出来大家讨论

使用

以下是引用片段:
$oBlock_ip = new block_ip();
$oBlock_ip->checkIP();

以下是引用片段:
class block_ip {
       var $Block_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*");
       
       function __construct(){
              
       }
       
       function __destruct(){
              
       }
       
       private function makePregIP($str){
              if (strstr($str,"-")) {
                     $aIP = explode(".",$str);
                     foreach ($aIP as $k=>$v) {
                            if (!strstr($v,"-")) {
                                   $preg_limit .= makePregIP($v);
                            }       else{
                                   $aipNum = explode("-",$v);
                                   for($i=$aipNum[0];$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->Block_ip) {
                     foreach ($this->Block_ip as $k=>$v) {
                            $ipaddres = $this->makePregIP($v->start_ip);
                            $ip = str_ireplace(".","\.",$ipaddres);
                            $ip  = str_replace("*","[0-9]{1,3}",$ip);
                            $ipaddres  = "/".$ip."/";
                            $ip_list[] = $ipaddres;
                     }
              }
              return $ip_list;
       }

       public function checkIP() {
              $iptable = $this->getAllBlockIP();
              $IsJoined = true;
              //取得用户ip
              $Ip = $this->get_client_ip();
              $Ip = trim($Ip);
              //剔除黑名单中的IP区段
              if ($iptable) {
                     foreach($iptable as $value) {
                            if (preg_match("{$value}",$Ip)) {
                                   $IsJoined = false;
                                   break;
                            }
                     }
              }
              //如果在ip黑名单中就执行如下操作
              if( !$IsJoined ){
                     echo "IP Error";
                     exit;
              }
       }

       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";
              return($ip);
       }

}
?>



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage