首页 > 其他分享 >js 检查 ip 是否在网段中

js 检查 ip 是否在网段中

时间:2024-06-21 09:33:05浏览次数:10  
标签:0.0 网段 16 ip js 地址 IP CIDR

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

相关文章

  • Uipath 如何连接SQLite数据进行操作
      1、下载SQLiteDatabaseActivitiesforUipathpackages,无需安装SQLite数据库驱动。2、SQLite查询操作   2.1添加查询活动:在UIPathStudio的“Activities”面板中,搜索并添加“ExecuteQuery”活动。这个活动用于执行SQL查询语。在“ExecuteQuery”活动的属......
  • Chip组件的用法
    文章目录概念介绍使用方法示例代码其它类Chip我们在上一章回中介绍了SliderWidget相关的内容,本章回中将介绍如何使用ChipWidget.闲话休提,让我们一起TalkFlutter吧。概念介绍本文中提到的ChipWidget在屏幕上显示一小块区域,类似悬浮的按钮,通常在网页类操作中比......
  • 序列化和反序列化pickle和json 模块
    importpicklehello='helloworld'data=pickle.dumps(hello)#pickle.dumps把任意对象序列化成一个bytes(字节数)print(data)data1=pickle.loads(data)#pickle.loads将字节数反序列化print(data1)importjsondata={'hello':123,'nihao':'word&......
  • 强大的多数据库客户端工具:DataGrip【送源码】
    今天给大家带来的工具是:DataGrip介绍DataGrip是jetbrains开发的一款关系数据库和NoSQL数据库的多数据库客户端工具,可以30天免费试用,后续使用需要购买。DataGrip还是一款强大的跨平台工具,支持多种操作系统,比如Windows、macOS、Linux等。特性配合智能查询控制台,提供强......
  • 调用了这么久的JS方法是长在对象、类、值本身还是原型链上?
    调用了这么久的JS方法是长在对象、类、值本身还是原型链上?JavaScript这门语言总是能带给我惊喜,在敲代码的时候习以为常的写法,退一步再看看发现自己其实对很多基操只有表面的使用,而从来没思考过为何要这样操作。今天整理JS代码的时候突然发出灵魂三连问:为什么有些时候操作对象,......
  • pip list https://github.com/pypa/pip 源码
    https://github.com/pypa/pip/blob/main/src/pip/_internal/commands/list.py    packages:"_ProcessedDists"=[      cast("_DistWithLatestInfo",d)      fordinget_environment(options.path).iter_installed_distributions(......
  • A类IP介绍
    1)A类ip给谁用:        给广域网用,公网ip使用A类地址,作为公网ip时,Ip地址是全球唯一的。2)基本介绍     ip地址范围     -理论范围     0.0.0.0~127.255.255.255:00000000000000000000000000000000~0111111111111111111111111111......
  • 超级好用的JSON格式化可视化在线工具
    JSON是开发非常常用的一种报文格式,最常见的需求就是将JSON进行格式化,最好是有图形化界面显示结构关系,以便进行数据分析。理想的在线JSON工具,应该支持快速格式化、可压缩、快捷复制、可下载导出,对存在语法错误的地方能明确显示。提供搜索定位功能,可视区足够大,最好支持全屏。......
  • nodejs Sequelize6连接mysql8的配置怎么写
    官方文档的构造器很多,这里仅展示一种const{Sequelize}=require('sequelize');/** *dbname *username *password *options */constsequelize=newSequelize('dbname','username','password',{  host:'127.0.0.1&......
  • 好代码资源网整站打包代码(包含了最新数据),集成了深度二开的ripro主题,非常适合做资源网
    好代码资源网是基于wordpress开发的一个资源分享类网站,在开发者圈子里还算小有名气,这里分享婴整站打包代码(包含了最新数据)。网站本身集成了深度二开的ripro主题,非常适合做资源网站创业用。资源下载类网站目前还是红利期,搞个特价主机和域名,再用这个代码搭建起来就可以投入运营......