时间:2021-07-01 10:21:17 帮助过:12人阅读
function ip_test($ip,$iprule){
$ipruleregexp=str_replace('.*','ph',$iprule);
$ipruleregexp=preg_quote($ipruleregexp,'/');
$ipruleregexp=str_replace('ph','\.[0-9]{1,3}',$ipruleregexp);
if(preg_match('/^'.$ipruleregexp.'$/',$ip)) return true;
else return false;
} 实现了ip_test这个核心函数后,下面的过程就简单多了,无非就是简单的遍历名单中的每条规则,判断当前连接的IP是否符合规则,并进行对应的步骤。
白名单,当IP至少满足一条规则时继续执行操作
$curr_ip=$_SERVER['REMOTE_ADDR'];
$white_list=array(...); //白名单规则
$test_success=false;
foreach($white_list as $iprule){
if(ip_test($curr_ip,$iprule)){
$test_success=true;
break;
}
}
if(!$test_success) exit('IP not in white list');黑名单,当IP不满足所有规则时继续执行操作
$curr_ip=$_SERVER['REMOTE_ADDR'];
$black_list=array(...); //黑名单规则
foreach($black_list as $iprule){
if(ip_test($curr_ip,$iprule)){
exit('IP in black list');
}
}就这样,一个简单的PHP实现的IP黑白名单过滤就完成了。这篇博客主要是给那些主业务不是开发的人员,如:技术支持、运维等。由于太简单,原本不想写,后来那个同事感谢我帮忙,对我说这个他在网上找了很久,都没有找到合适的解决方案,我就想说不定这个还真有人需要呢。