js 检查 ip 是否在网段中
js 检查 ip 是否在网段中
当设置 ip 白名单时,可以直接配置 ip 或一个 CIDR 表示法的 IPv4 地址块
CIDR
需要先理解 CIDR 表示法的 IPv4 地址块对应的意思,来源于文心一言的解释:
CIDR(无类域间路由)是一种用于对互联网 IP 地址进行聚合和分配的技术。它解决了 IPv4 地址空间不足的问题,并通过改变 IP 地址的分配方式,实现了对地址空间的高效利用。 在 CIDR 之前,互联网使用的是基于类别的 IP 地址分配方案,如 A 类、B 类、C 类等。这种分配方案导致了大量的 IP 地址浪费和不均匀分配。CIDR 的引入打破了基于类别的划分,引入了可变长度子网掩码(VLSM)的概念。CIDR 使用前缀长度来表示 IP 地址的网络部分的位数,通过变长预留地址前缀的方式,使被分配的 IP 地址可以以不同的大小来分配,增加了 IPv4 地址的分配效率。 CIDR 的表示法是一个斜线后跟一个数字,如 192.168.0.0/16,其中“/16”表示前 16 位为网络部分,剩余的位数为主机部分。这种表示法可以快速判断 IP 地址属于哪个网络。 CIDR 在网络中的作用主要体现在以下几个方面: 1. 节约 IP 地址空间:CIDR 技术允许更精确地划分 IP 地址,避免了传统类别划分带来的浪费,延长了 IPv4 的可持续使用时间。 2. 减少路由表规模:CIDR 将相邻的 IP 地址范围聚合为更大的地址块,有效减少了路由表中的条目数,降低了路由器的负担,提高了路由效率和网络性能。 3. 灵活的子网划分:CIDR 允许网络管理员根据实际需求自由划分子网,提供更好的灵活性和可扩展性,对于构建大型企业网络或云计算环境非常重要。 4. 支持无缝迁移:CIDR 的使用不影响现有的 IP 地址分配和路由架构,它可以与传统的类别划分方式共存,逐步过渡到更高效的 IP 地址管理方式。 CIDR 在网络安全、开发测试、网络监控等方面都有广泛的应用。例如,在网络安全中,对特定 IP 或子网的流量进行强制代理可以提高安全性,防止数据泄露;在开发测试中,可以在不同的网络环境中测试应用程序;在网络监控中,使用 CIDR 规则可以更容易地跟踪和分析特定网络区域的流量。 总的来说,CIDR 是一种现代化的 IP 地址分配和路由技术,改变了传统的类别划分方式,提供了更灵活、高效和可扩展的网络架构。
在实际使用中,重点关注:CIDR 的表示法是一个斜线后跟一个数字,如 192.168.0.0/16,其中“/16”表示前 16 位为网络部分,剩余的位数为主机部分。这种表示法可以快速判断 IP 地址属于哪个网络。,192.168.0.0/16 所对应的网段就是 192.168.0.0 - 192.168.255.255,再比如,10.0.0.0/8 表示一个具有 8 位前缀的地址块,包含了从 10.0.0.0 到 10.255.255.255 的所有地址。10.0.0.0/24 表示一个具有 24 位前缀的子网,包含了从 10.0.0.0 到 10.0.0.255 的所有地址。
检查
使用 ipaddr.js 库,直接安装npm i ipaddr.js
const ipaddr = require("ipaddr.js"); /** * 判断 IP 地址是否在 IP 段内 * @param {string} ipAddress 需要检查的 IP 地址 * @param {string[]} subnetStrArr IP 段数组,格式为 IP 或 IP/数字 * @returns {boolean} */ function isIpAddressInRange(ipAddress, subnetStrArr) { try { for (let subnetStr of subnetStrArr) { if (ipAddress == subnetStr) { return true; } else { if (subnetStr.split("/").length == 2) { const ip = ipaddr.parse(ipAddress); const parsedSubnet = ipaddr.parseCIDR(subnetStr); if (ip.match(parsedSubnet)) { return true; } } } } } catch (error) { console.log("isIpAddressInRange error:", error); } return false; // IP地址不在任何预设范围内 } // 示例:预设的IP段,格式为 "IP地址/掩码" const presetIpRanges = ["117.139.203.0/16"]; const testIpAddress = "117.139.203.15"; const result = isIpAddressInRange(testIpAddress, presetIpRanges); if (result) { console.log(`The IP address ${testIpAddress} is within the range`); } else { console.log(`The IP address ${testIpAddress} is NOT within any predefined ranges.`); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!