Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
从IP地址范围提取/24 CIDR块的PHP教程_创想鸟

从IP地址范围提取/24 CIDR块的PHP教程

从ip地址范围提取/24 cidr块的php教程

本文详细介绍了如何使用PHP从给定的IPv4地址范围中高效地提取所有独立的/24 CIDR块。通过利用PHP内置的ip2long和long2ip函数,结合位运算和迭代逻辑,我们能够将复杂的IP范围(例如86.111.160.0 – 86.111.175.255)转换为标准化的/24网络地址列表(例如86.111.160.0, 86.111.161.0, … 86.111.175.0)。教程包含详细的代码示例和实现原理,帮助开发者掌握IP地址处理技巧。

1. 引言:理解需求

在网络管理和系统开发中,经常需要对IP地址进行操作。一个常见的场景是从一个连续的IP地址范围中,提取出所有符合特定子网掩码(例如/24)的网络块。例如,给定一个IP范围 86.111.160.0 – 86.111.175.255,我们的目标是生成一系列标准的/24网络地址,如 86.111.160.0, 86.111.161.0, …, 86.111.175.0。本教程将详细介绍如何使用PHP实现这一功能。

2. IP地址的数字表示与CIDR基础

在PHP中,处理IP地址通常涉及到将其转换为长整型(32位无符号整数)进行计算,然后再转换回点分十进制字符串。

ip2long(): 将IPv4点分十进制字符串转换为长整型。long2ip(): 将长整型IP地址转换回点分十进制字符串。

一个/24 CIDR块表示一个子网,其子网掩码为255.255.255.0。这意味着IP地址的前24位用于表示网络部分,后8位用于表示主机部分。因此,一个/24网络的起始地址总是X.Y.Z.0的形式,其中X.Y.Z是网络地址,而.0是该网络的第一个可用IP地址(网络地址本身)。

立即学习“PHP免费学习笔记(深入)”;

3. 核心功能:提取网络地址

为了从任意IP地址中获取其所属的/24网络地址(即X.Y.Z.0),我们可以实现一个辅助函数。这个函数会接收一个IP地址和一个CIDR掩码,然后通过位运算来计算出网络地址。

<?php/** * 根据IP地址和CIDR掩码计算网络地址。 * * @param string $ip 要检查的IP地址。 * @param string $cidr 包含CIDR掩码的字符串,例如 "192.168.1.0/24"。 * @return string 返回计算出的网络地址(例如 "192.168.1.0")。 */function getNetworkAddress($ip, $cidr) {    // 将CIDR字符串分割为网络地址和掩码位数    list($net, $maskBits) = explode("/", $cidr);    // 将网络地址和IP地址转换为长整型    $ipLong = ip2long($ip);    // 计算子网掩码的整数表示。    // 例如,对于/24,(32 - 24) = 8。    // (1 << 8) - 1 = 255 (即0000000011111111)    // ~255 = ...11111111111111111111111100000000 (即255.255.255.0的整数表示)    $subnetMaskLong = ~((1 <

函数解析:

list($net, $maskBits) = explode(“/”, $cidr);: 从CIDR字符串中分离出IP地址部分和掩码位数。$ipLong = ip2long($ip);: 将输入的IP地址转换为长整型。$subnetMaskLong = ~((1 32 – $maskBits: 计算主机位数量。例如,对于/24,主机位是8位。(1 ~: 按位取反操作,将上述掩码变为高位全为1,低位全为0的形式,这正是子网掩码的二进制表示(例如,0xFFFFFF00)。$networkAddressLong = $ipLong & $subnetMaskLong;: 对IP地址的长整型表示和子网掩码进行按位与操作。这个操作会清除IP地址中的主机位,只保留网络位,从而得到网络地址。return long2ip($networkAddressLong);: 将计算出的网络地址转换回点分十进制字符串。

4. 迭代IP范围并提取/24块

有了getNetworkAddress函数,我们就可以遍历给定的IP范围,并为范围内的每个/24块生成其网络地址。关键在于如何正确地从一个/24块的起始IP跳到下一个/24块的起始IP。

一个/24块包含256个IP地址(从X.Y.Z.0到X.Y.Z.255)。因此,从一个/24块的起始地址跳到下一个/24块的起始地址,需要将IP地址的长整型值增加256。

<?php// 假设getNetworkAddress函数已定义如上/** * 从给定的IP地址范围中提取所有/24 CIDR块的起始地址。 * * @param string $ipRange 格式为 "起始IP - 结束IP" 的IP地址范围字符串。 * @return array 返回一个包含所有/24网络地址字符串的数组。 */function extract24BlocksFromRange($ipRange) {    $blocks = [];    // 1. 解析IP范围字符串    list($lowerStr, $upperStr) = explode('-', $ipRange);    $lowerStr = trim($lowerStr);    $upperStr = trim($upperStr);    // 2. 将起始和结束IP转换为长整型    $lowerIpLong = ip2long($lowerStr);    $upperIpLong = ip2long($upperStr);    // 3. 确保起始IP是其所属/24块的网络地址    // 这一步是确保我们从正确的/24边界开始。    // 例如,如果lowerStr是"86.111.160.50",我们应该从"86.111.160.0"开始。    $currentBlockStartIpLong = getNetworkAddress(long2ip($lowerIpLong), long2ip($lowerIpLong) . '/24');    $currentBlockStartIpLong = ip2long($currentBlockStartIpLong);    // 4. 迭代生成/24块    // 循环条件是当前块的起始IP不能超过整个范围的结束IP。    // 注意:这里比较的是整个范围的结束IP(例如86.111.175.255),而不是其所属/24块的起始IP。    while ($currentBlockStartIpLong 

实现解析:

解析范围: 使用explode(‘-‘,$range)将输入字符串分割为起始IP和结束IP。转换为长整型: ip2long()用于将点分十进制IP转换为可计算的长整型。对齐起始IP: getNetworkAddress(long2ip($lowerIpLong), long2ip($lowerIpLong) . ‘/24’) 这一步非常重要。它确保我们总是从一个/24块的精确网络地址(即.0结尾的地址)开始计数,即使输入的起始IP不是.0结尾。循环迭代:while ($currentBlockStartIpLong

以上就是从IP地址范围提取/24 CIDR块的PHP教程的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1335928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
php怎么调试接口日志分析_php接口请求日志分析与问题定位方法
上一篇 2025年12月12日 21:40:50
PHP:从指定IP范围中随机选择IP地址
下一篇 2025年12月12日 21:41:05

相关推荐

  • 消逝的光芒困兽传奇单手砍刀施特劳斯与布罗达获取方法 传奇单手砍刀怎么获取

    消逝的光芒:困兽游戏中,传奇单手砍刀“施特劳斯与布罗达”位于金松公园东边的工业区出租车公司大楼。玩家需先抵达该建筑的屋顶,找到通往上锁小房间的入口,撬开房门后进入内部。 在房间内的墙上会看到一个悬挂的盒子,使用近战武器持续攻击这个盒子,经过一段时间的敲击后即可将其破坏并取得其中的武器。 具体路线如下…

    2026年9月22日
    1000
  • PHP中为数组元素设置默认值的最佳实践:使用Null合并运算符

    本教程将介绍如何在PHP中为数组元素设置默认值,尤其当源数据可能为空或缺失时。通过利用PHP 7+提供的Null合并运算符(??),可以简洁高效地实现这一需求,避免冗长的条件判断,提高代码可读性和健壮性。 引言:处理缺失或空值时的数组赋值 在Web开发中,我们经常需要从用户请求、数据库查询或其他外部…

    2026年9月22日
    000
  • Laravel 8 登录后重定向至仪表盘的策略与实践

    本教程详细阐述了在 Laravel 8 中实现用户登录后重定向到仪表盘的多种策略。我们将探讨如何通过配置 LoginController 的 $redirectTo 属性、利用 RouteServiceProvider 定义常量以及在自定义登录方法中进行精确控制来管理重定向流程。文章还涵盖了相关中间…

    2026年9月22日
    000
  • Grok官方网站直达页_Grok官网官方网页版入口

    Grok官网官方网页版入口为https://grok.com,用户可通过该网站访问网页端服务,支持跨设备同步;同时可下载移动应用或在X平台内使用Grok功能。未订阅用户可体验基础功能,Premium及Premium+需通过X平台订阅,SuperGrok则仅在官网提供,具备更强数据处理能力。账户升级后…

    2026年9月22日
    600
  • PHP如何利用缓存优化实时输出_PHP实时输出与缓存结合优化

    PHP实时输出需结合输出缓冲控制与flush()强制推送,同时考虑服务器和浏览器缓存影响;2. 长时间任务应使用APCu或Redis缓存频繁数据,避免重复计算;3. 动态页面可采用分块输出与片段缓存策略,静态内容从缓存读取,动态部分边生成边输出;4. 更优方案是通过异步任务与Redis存储进度,前端…

    2026年9月22日
    000
  • 递归实现列表排序检查与条件移除最大值

    本文详细介绍了如何使用Java递归方法处理整数列表。核心内容包括:首先检查列表是否已排序,如果已排序则直接返回false;如果未排序,则查找列表中的最大值。仅当最大值位于列表的起始或结束位置时,才将其移除并递归地继续处理列表。如果最大值位于列表中间,则打印当前列表并终止递归。 在数据处理和算法设计中…

    2026年9月22日
    000
  • VS Code中Dockerized PHP项目:解决PHP版本冲突的教程

    本教程旨在解决在VS Code中开发Dockerized PHP项目时,VS Code默认识别宿主机PHP版本而非容器内PHP版本的问题。核心解决方案是利用VS Code的Remote – Containers扩展,实现直接在Docker容器内部进行代码开发,从而确保VS Code及其所…

    2026年9月22日
    200
  • PHP each() 函数的替代方案:自定义实现与常见错误修正

    本文探讨了PHP中已废弃的each()函数的替代方案。针对常见的自定义实现,如myEach(),文章详细指出了其在返回数组结构中常犯的错误,并提供了正确的代码示例,以确保替代函数能够模拟each()的预期行为,帮助开发者编写更健壮、兼容未来的PHP代码。 理解 each() 函数及其废弃背景 在PH…

    2026年9月22日
    000
  • Cortana如何连接邮箱_Cortana邮箱同步配置方法

    首先需将邮箱账户与Cortana连接,可通过Windows设置添加账户或在Cortana应用内手动配置,支持Outlook.com、Gmail及Exchange等类型;完成账户添加后,须在隐私权限中启用邮件读取和同步权限,确保Cortana可访问邮件、日历及联系人数据,从而实现智能提醒与信息同步功能…

    2026年9月22日
    000
  • 解决PHP应用中本地文件更新后网页视图不刷新的缓存问题

    本文探讨了PHP应用中,本地JSON或图片文件更新后,网页视图无法实时刷新的常见问题。核心原因在于浏览器缓存机制。文章将提供多种解决方案,包括强制刷新、隐身模式诊断、以及通过URL参数、服务器配置(.htaccess)和文件版本控制来有效管理缓存,确保用户始终获取最新数据。 理解问题:本地文件更新与…

    2026年9月22日
    200
  • Java Stream API:从嵌套集合中提取唯一值的高效实践

    本文深入探讨如何利用Java Stream API,从包含嵌套集合的对象列表中高效地提取唯一的字符串值。我们将重点介绍flatMap()和mapMulti()这两种强大的流操作,演示它们如何替代传统的嵌套循环,从而实现代码的简洁性、可读性以及潜在的性能优化。 在java应用开发中,我们经常会遇到处理…

    2026年9月22日
    100
  • Laravel 8 登录后重定向到仪表盘:完整教程

    本教程详细阐述了在 Laravel 8 中实现用户登录后重定向到仪表盘的多种方法。我们将探讨 Laravel 默认的重定向机制、如何正确配置仪表盘路由及其中间件,并提供通过自定义 LoginController 实现精确重定向的示例代码。通过本文,您将全面掌握 Laravel 认证后的重定向流程,并…

    2026年9月22日
    500
  • 一键PHP环境怎么解决网页空白问题_空白页故障诊断

    答案是开启错误提示并检查文件路径与代码逻辑。先启用PHP错误显示,确认配置正确;再核对网站根目录和入口文件是否存在;接着排查代码致命错误及输出缓冲问题,确保无BOM头且session前无输出。 遇到一键PHP环境安装后出现网页空白或空白页问题,通常不是环境完全失效,而是某些关键环节出了错。这类问题在…

    2026年9月21日
    100
  • PHP三元运算符HTML输出_PHP三元运算符HTML内容输出

    PHP三元运算符用于在HTML中简洁输出条件内容,基本语法为“条件 ? 值1 : 值2”;2. 常用于动态显示文本、属性或样式,如根据$active输出“启用”或“禁用”;3. 可嵌入HTML标签设置class、disabled等属性,示例中根据登录状态显示不同按钮。 PHP三元运算符用于在HTML…

    2026年9月21日
    200
  • 巧文书AI官网首页官方入口 巧文书AI在线文档编辑官网链接直达

    巧文书AI官网首页官方入口是https://qiaowenshu.cn,该平台提供AI驱动的文档生成、智能解析、语义扩展、在线编辑与保存等功能,支持多场景文案创作和跨设备同步,具备一键润色、风格推荐及模板管理等智能化写作辅助体验。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用…

    2026年9月21日
    100
  • 微信读书网页官方登录入口_微信读书在线阅读官方网站链接

    微信读书在线阅读官方网站链接是https://weread.qq.com/,提供海量图书资源、多设备同步、社交化阅读、听书功能及免费专区与会员体系。 微信读书网页官方登录入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来微信读书在线阅读官方网站链接,感兴趣的网友一起随小编来瞧瞧吧! ht…

    2026年9月21日
    200
  • PHP中基于参考数组过滤多维数组并保持结构一致性

    本教程详细阐述了如何在PHP中,根据一个参考数组来过滤多维数组的特定子数组,并同步移除其他子数组中对应索引的元素,最终实现数组的结构化筛选和重新索引。文章通过实际案例和代码演示,指导读者高效地处理复杂数组的匹配与清理任务。 在php开发中,我们经常会遇到需要对复杂数据结构进行筛选和整理的场景。例如,…

    2026年9月21日
    100
  • Laravel 8 登录后重定向到仪表盘的完整教程

    本教程详细介绍了在 Laravel 8 中实现用户登录后重定向到仪表盘的多种方法。我们将探讨如何利用 Laravel 内置的 $redirectTo 属性,以及如何通过重写 LoginController 中的 login 方法来实现自定义重定向逻辑。此外,教程还将重点讲解正确的路由配置和中间件使用…

    2026年9月21日
    100
  • PHP一键环境如何配置URL重写_URL Rewrite规则设置

    开启Apache的mod_rewrite模块并配置AllowOverride All,再在.htaccess中添加重写规则,即可实现URL重写,使URL更简洁利于SEO。 在使用PHP一键环境(如XAMPP、WAMP、phpStudy等)时,开启URL重写(URL Rewrite)功能可以让网站的U…

    2026年9月21日
    200
  • 解决WordPress wp-settings.php中致命错误的实用指南

    当WordPress网站遭遇wp-settings.php中Call to undefined function的致命错误时,通常意味着核心文件已损坏。本教程将指导您通过下载全新WordPress副本并替换站点中wp-admin和wp-includes目录来有效解决此问题,确保网站恢复正常运行,并提…

    2026年9月21日
    100

发表回复

登录后才能评论
关注微信