检测ip地址库内是否存在指定的ip

2024-03-20 15:38

本文主要是介绍检测ip地址库内是否存在指定的ip,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

检测ip地址库内是否存在指定的ip,支持精确匹配、尾部*号匹配及ip区间匹配。

应用场景:ip 白名单 / 黑名单、系统后台限制内网访问等。

/*** 检测ip地址库内是否存在指定的ip,支持精确匹配、尾部*号匹配及ip区间匹配* @param string $ip 待检测的ip字符串* @param array $ipList ip数组列表,该参数为空时,忽略检测* @return bool true 地址库为空 或 地址库内存在指定的ip | false 地址库内不存在指定的ip*/public function filterIP($ip,$ipList=array()) {if (!$ipList) {return true;}// 优先精确匹配if (in_array($ip,$ipList)) {return true;}$ip_tmp = explode('.',$ip);$ip_tmp_pad = $ip_tmp;array_walk($ip_tmp_pad,function(&$value,$key){$value = str_pad(strval($value), 3, '0', STR_PAD_LEFT);});$ip_tmp_long = implode('',$ip_tmp_pad);// ip段区间匹配foreach ($ipList as $ipItem) {if (strpos($ipItem,'-') === false) {continue;}$ip_item_tmp = explode('-',$ipItem);// 起始ip$ip_start = trim($ip_item_tmp[0]);$ip_start_arr = explode('.',$ip_start);array_walk($ip_start_arr,function(&$value,$key){$value = str_pad(strval($value), 3, '0', STR_PAD_LEFT);});$ip_start = implode('',$ip_start_arr);// 截止ip$ip_end = trim($ip_item_tmp[1]);$ip_end_arr = explode('.',$ip_end);array_walk($ip_end_arr,function(&$value,$key){$value = str_pad(strval($value), 3, '0', STR_PAD_LEFT);});$ip_end = implode('',$ip_end_arr);if ($ip_tmp_long >= $ip_start && $ip_tmp_long <= $ip_end) {return true;}}// 模糊匹配处理$flag = false;foreach ($ipList as $ipItem) {$ip_item_tmp = explode('.',$ipItem);if ($ip_item_tmp[0] == '*') {$flag = true;break;}// ip第1段if ($ip_item_tmp[0] == $ip_tmp[0] && $ip_item_tmp[1] == '*') {$flag = true;break;}// ip第2段if ($ip_item_tmp[0] == $ip_tmp[0] && $ip_item_tmp[1] == $ip_tmp[1] && $ip_item_tmp[2] == '*') {$flag = true;break;}// ip第3段if ($ip_item_tmp[0] == $ip_tmp[0] && $ip_item_tmp[1] == $ip_tmp[1] && $ip_item_tmp[2] == $ip_tmp[2] && $ip_item_tmp[3] == '*') {$flag = true;break;}// ip第4段if ($ip_item_tmp[0] == $ip_tmp[0] && $ip_item_tmp[1] == $ip_tmp[1] && $ip_item_tmp[2] == $ip_tmp[2] && $ip_item_tmp[3] == $ip_tmp[3]) {$flag = true;break;}}return $flag;}

 

这篇关于检测ip地址库内是否存在指定的ip的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/829940

相关文章

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用