元々いくつかの関数を書いていて、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();
|
以下引用部分: 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); } } ?> |