以下是PHP代码
<?php
//check_ip_h(array('113.68.238.*'),array('113.68.238.126'));//示例用法 全部留空不启用验证
/**
* 检测访问的ip是否为规定的允许的ip 【黑名单】
* $check_ip :array 黑名单ip [可空]
* $check_ip_b :array 白名单ip [可空]
* $IP :text 进入IP [可空]
* $exit :strict true=终止运行 默认true [可空]
*/
function check_ip_h($check_ip=false,$check_ip_b=false,$IP=false,$exit=true){
if($check_ip===false){
return false;
}
if(!$IP) $IP=isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"]:(isset($_SERVER["HTTP_CLIENT_IP"])?$_SERVER["HTTP_CLIENT_IP"]:$_SERVER["REMOTE_ADDR"]);
if($check_ip_b!==false){
$baimingdan_ip=check_ip_b($check_ip_b);
}
if(!$baimingdan_ip){
$check_ip_arr= explode('.',$IP);//要检测的ip拆分成数组
#限制IP
foreach ($check_ip as $val){
if(strpos($val,'*')!==false){//发现有*号替代符
$arr=array();
$arr=explode('.', $val);
$bl=true;//用于记录循环检测中是否有匹配成功的
for($i=0;$i<4;$i++){
if($arr[$i]!='*'){//不等于* 就要进来检测,如果为*符号替代符就不检查
if($arr[$i]!=$check_ip_arr[$i]){
$bl=false;
break;//终止检查本个ip 继续检查下一个ip
}
}
}//end for
if($bl){//如果是true则找到有一个匹配成功的就返回
header('HTTP/1.1 403 Forbidden');
echo "Access forbidden";
if($exit===true){
exit;
}else{
return;
}
}
}
}
if(in_array($IP,$check_ip)){
header('HTTP/1.1 403 Forbidden');
echo "Access forbidden";
if($exit===true){
exit;
}else{
return;
}
}
}
}
/**
* 检测访问的ip是否为规定的允许的ip 【白名单】
* $check_ip :白名单ip [必填]
* $IP :进入IP [可空]
* return true=找到白名单 false=没在白名单
*/
function check_ip_b($check_ip,$IP=false){
if(!$IP) $IP=isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"]:(isset($_SERVER["HTTP_CLIENT_IP"])?$_SERVER["HTTP_CLIENT_IP"]:$_SERVER["REMOTE_ADDR"]);
$check_ip_arr= explode('.',$IP);//要检测的ip拆分成数组
if(!is_array($check_ip)){
$check_ip = [
0=>$check_ip
];
}
#限制IP
foreach ($check_ip as $val){
if(strpos($val,'*')!==false){//发现有*号替代符
$arr=array();
$arr=explode('.', $val);
$bl=true;//用于记录循环检测中是否有匹配成功的
for($i=0;$i<4;$i++){
if($arr[$i]!='*'){//不等于* 就要进来检测,如果为*符号替代符就不检查
if($arr[$i]!=$check_ip_arr[$i]){
$bl=false;
break;//终止检查本个ip 继续检查下一个ip
}
}
}//end for
if($bl){//如果是true则找到有一个匹配成功的就返回
return true;
}
}
}
if(in_array($IP,$check_ip)){
return true;
}
return false;
}