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 相关文章推荐
phpmyadmin的#1251问题
Nov 25 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 PHP
PHP安全上传图片的方法
Mar 21 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
laravel 事件/监听器实例代码
Apr 12 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 保留字列表
2012/10/04 PHP
PHP中常用的转义函数
2014/02/28 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
python正则表达式抓取成语网站
2013/11/20 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
简单实现python进度条脚本
2017/12/18 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
简单了解python数组的基本操作
2019/11/26 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
预备党员综合考察材料
2014/05/31 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
nginx+lua单机上万并发的实现
2021/05/31 Servers
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript