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 相关文章推荐
PHP学习资料汇总与网址
Mar 16 PHP
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
Oct 13 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
PHP网页缓存技术优点及代码实例
Jul 29 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获取301跳转URL简单实例
2013/12/16 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
js鼠标左右键 键盘值小结
2010/06/11 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
python pdb调试方法分享
2014/01/21 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
python实现折半查找和归并排序算法
2017/04/14 Python
tensorflow识别自己手写数字
2018/03/14 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
python同步两个文件夹下的内容
2019/08/29 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
金融专业个人求职信范文
2013/11/28 职场文书
临床专业自荐信
2014/06/22 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
具结保证书范本
2015/05/11 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript