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.`);
}
标签:0.0,网段,16,ip,js,地址,IP,CIDR
From: https://www.cnblogs.com/shouwangrenjian/p/18217544