博客
关于我
php判断ip黑名单程序代码
阅读量:793 次
发布时间:2023-03-01

本文共 2695 字,大约阅读时间需要 8 分钟。

学校的新闻系统需要对访问权限进行IP地址控制,这可以通过简单的白名单机制来实现。具体来说,只需将允许访问的IP地址添加到ip.txt文件中,系统就会自动将这些IP地址设置为可访问的范围。为了满足实际需求,我们还支持C类IP地址的范围指定。

以下是实现该功能的最新代码版本:

$v) {
if (!strstr($v, "-")) {
$preg_limit .= $preg_limit ?: "[".$v."]".";
} else {
$aipNum = explode("-", $v);
for ($i = $aipNum[0]; $i <= $aipNum[1]; $i++) {
$preg .= $preg ? "|" . $i : "[".$i"]";
}
$preg_limit .= $preg ? "]" : $preg."]";
$preg_limit .= $preg_limit[strlen($preg_limit)-1] === "." ? "]" : ".";
}
}
return $preg_limit;
} else {
return $str . ".";
}
}
private function getAllBlockIP() {
if (!empty($this->Block_ip)) {
$ip_list = array();
foreach ($this->Block_ip as $k => $v) {
$start_ip = $v;
$ipaddres = $this->makePregIP($start_ip);
$ip = str_ireplace(".", ".", $ipaddres);
$ip = str_replace("*", "[0-9]{1,3}", $ip);
$ipaddres = "/".$ip."/";
array_push($ip_list, $ipaddres);
}
return $ip_list;
}
return array();
}
public function checkIP() {
$iptable = $this->getAllBlockIP();
$IsJoined = true;
$Ip = $this->get_client_ip();
$Ip = trim($Ip);
if (!empty($iptable)) {
foreach ($iptable as $value) {
if (preg_match($value, $Ip)) {
$IsJoined = false;
break;
}
}
}
if (!$IsJoined) {
echo "IP Error";
exit;
}
}
private function get_client_ip() {
$ip = "unknown";
if (isset($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], "unknown")) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], "unknown")) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
$ip = $_SERVER['REMOTE_ADDR'];
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
}

以下是代码的使用示例:

$block_ip = new block_ip();
$block_ip->checkIP();

这个解决方案通过将IP地址存储在文本文件中实现了简单的访问控制机制。系统会自动读取这些IP地址,并检查访问者的IP地址是否允许访问。这种方式既直观又灵活,支持单个IP地址、IP地址范围以及C类IP地址的 wildcard 模式。

转载地址:http://ujtfk.baihongyu.com/

你可能感兴趣的文章
PHP WebSehll 后门脚本与检测工具
查看>>
ReentrantLock源码解析
查看>>
PHP XSS攻击防范--如何过滤用户输入
查看>>
php zookeeper实现分布式锁
查看>>
PHP 中 this,self,parent 的区别、用法
查看>>
PHP 中如何高效地处理大规模数据的排序?
查看>>
PHP 之ftp客户端类封装实现
查看>>
php 代码改进
查看>>
php 代码混淆
查看>>
PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
查看>>
Redis系列之如何避免缓存击穿
查看>>
php 内存分析
查看>>
PHP 函数名前面加&
查看>>
redis报错
查看>>
php 删除包含某一字符的数组元素
查看>>
Redis学习总结(19)——Redis 5种集群方式对比
查看>>
php 反射
查看>>
php 处理 大并发
查看>>
php 大文件上传
查看>>
php 子进程监听消息,swoole学习笔记之多线程端口监听问题记录 多进程epoll模式...
查看>>