• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

黑白名单:PHP实现IP黑白名单过滤_php

php 搞代码 3年前 (2018-06-21) 137次浏览 已收录 0个评论

    需求来自一个运维的同事,对一个php文件执行进行IP过滤,不方便直接配置服务器,于是需要直接在php文件开头进行IP的过滤。
    IP过滤规则,可以有如下形式:
    1.完整的IP地址 如:192.168.0.1 
    2.某一段IP 如:192.168.0.* 。
    运维可以自定义IP黑白名单,由多个IP过滤规则组成,保存在数组中。通过编写代码,实现IP黑白名单功能。一个比较简单的需求。

http://www.gaodaima.com/50723.html黑白名单:PHP实现IP黑白名单过滤_php

    首先实现一个函数,功能是判断ip是否符合某个ip过滤规则:
   
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黑白名单过滤就完成了。这篇博客主要是给那些主业务不是开发的人员,如:技术支持、运维等。由于太简单,原本不想写,后来那个同事感谢我帮忙,对我说这个他在网上找了很久,都没有找到合适的解决方案,我就想说不定这个还真有人需要呢。   本文链接http://www.cxybl.com/html/wlbc/Php/20130326/37394.html

欢迎大家阅读《黑白名单:PHP实现IP黑白名单过滤_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址