检测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

相关文章

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调用

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM