php判断ip黑名单程序代码实例


Posted in PHP onFebruary 24, 2014

学校的新闻系统要求有些新闻只开放校内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; 
} 
} 
} 
// 如果在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();
PHP 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
建站常用13种PHP开源CMS比较
Aug 23 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 PHP
thinkphp的c方法使用示例
Feb 24 #PHP
php根据操作系统转换文件名大小写的方法
Feb 24 #PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 #PHP
thinkphp控制器调度使用示例
Feb 24 #PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 #PHP
将php数组输出html表格的方法
Feb 24 #PHP
php格式化日期和时间格式化示例分享
Feb 24 #PHP
You might like
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
前台接待岗位职责
2013/12/03 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
排查整治工作方案
2014/06/09 职场文书
Mysql忘记密码解决方法
2022/02/12 MySQL