学校的新闻系统要求有些新闻只开放校内ip浏览,于是重写了一个代码来实现此功能,实现后的结果是,只要把允许访问的ip列入ip.txt这个文件中即可,同时支持c类ip,例如:
ip.txt
192.168
211.67.188
211.67.191.25
代码如下:
代码如下 |
复制代码 |
/* * ip地址黑名单、白名单 * 判断访客地址的ip是否在ip.txt中,支持c类ip * By
xhat */
$ip = $_SERVER[‘REMOTE_ADDR‘]; $ipArray =
preg_replace("#rn?|n#","",file(‘ip.txt‘)); foreach ($ipArray as $ipTest) { if (substr_count($ip, $ipTest) != "0") { echo "ok";
//执行相关命令 die(); } }
?> |
上面大家可以使用代码来骗过了,下面代码进行升级
代码如下 |
复制代码 |
<?php 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<=$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->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; } } } // www.111cn.net如果在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);
} } ?> |
引用片段:
代码如下 |
复制代码 |
$oBlock_ip = new block_ip(); $oBlock_ip->checkIP(); |