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 相关文章推荐
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
php接口与接口引用的深入解析
Aug 09 PHP
php给每个段落添加空格的方法
Mar 20 PHP
PHP连接access数据库
Mar 27 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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截取中文字符串的问题
2006/07/12 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
javascript常见操作汇总
2014/09/03 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
Python字典及字典基本操作方法详解
2018/01/30 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
Python  Django 母版和继承解析
2019/08/09 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
CNC数控操作工岗位职责
2013/11/19 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
促销活动计划书
2014/05/02 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
2014年路政工作总结
2014/12/10 职场文书
公司停电通知
2015/04/15 职场文书
罚款通知怎么写
2015/04/22 职场文书
安全学习心得体会范文
2016/01/18 职场文书
员工工作心得体会
2019/05/07 职场文书
2019银行竞聘书
2019/06/21 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL