ホームページ  >  記事  >  php教程  >  IP および IP セグメントへのアクセスを制限する

IP および IP セグメントへのアクセスを制限する

WBOY
WBOYオリジナル
2016-06-21 08:57:511226ブラウズ

元々いくつかの関数を書いていて、IPブラックリストをライブラリに記録していたものを、分かりやすくするために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 = 新しい block_ip();
以下是引用片段:
$oBlock_ip = new block_ip();
$oBlock_ip->checkIP();
$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(){

}

プライベート関数 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<=$aipNum[1];$i++)
$preg .=$preg?"|".$i:"[".$私;

$preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)- 1)?$preg."]":".".$preg."] ";
}
}
}else{
$preg_limit .= $str.".";
}
return $preg_limit;
}

プライベート 関数 getAllBlockIP(){
              if ($this->Block_ip) {
foreach ($this->Block_ip as $k=>$v) {
$ipaddres = $this->make PregIP($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;
休憩;
}

//如果在ip黑名单中就行以下の操作
if( !$IsJoined ){
echo "IP Error";
終了します。
}
}

       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 = $_サーバー[' REMOTE_ADDR'];
else
$ip = 「不明」;
return($ip);
}

}
?>



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。