【问题标题】:Javascript calculate IPv6 range from CIDR prefixJavascript 从 CIDR 前缀计算 IPv6 范围
【发布时间】:2023-04-07 13:37:01
【问题描述】:

使用 Javascript(不带 JQuery)我正在寻找 IPv6 CIDR 前缀中的最小和最大 IP。

例如,2001:280::/32 将输出 2001:280:0:0:0:0:0:02001:280:ffff:ffff:ffff:ffff:ffff:ffff

我该怎么做?提前致谢!

【问题讨论】:

标签: javascript ip-address ipv6 cidr


【解决方案1】:

假设你已经安装了 Node 和 NPM:

$ touch index.js
$ npm init
$ npm i --save ip-address
$ vim index.js

var v6 = require('ip-address').v6;

var addr = new v6.Address('2001:280::/32');

console.log(addr.parsedAddress.join(':'));
console.log(addr.endAddress().address);

$ <esc>:wq
$ node index.js
2001:280:0:0:0:0:0:0
2001:0280:ffff:ffff:ffff:ffff:ffff:ffff

似乎没有面向浏览器的包,所以我建议使用 Browserify (http://browserify.org/) 来让它工作分叉项目并将所有内容放入一个文件中,这样你可以在浏览器中运行它(当然,省略了特定于节点的代码)。

【讨论】:

  • 请注意,这实际上并不计算上限。 IPv6 允许将“所有”的 2^48 MAC 地址放在一个 /64 上,但即使你可以这样做,你也不能这样做两次,因为一旦你将它们全部连接到一个,就没有其他的了网络。因此,/64 的理论上限大约是 2^48 个设备,/48 也是 2^48,而 /32 是相同的 2^48。这在实践中意味着 IPv6 没有某些限制,计算那些有限的资源是没有意义的。
  • @arnt,虽然我同意每个 /64 有 18 个 quintillion 地址是一个荒谬的数字,但您的推理是不正确的。 IPv6 允许每个接口使用任意数量的 IPv6 地址(MAC 地址),因此,理论上,您可以使用 /64 上的所有可用地址,尽管您无法活到足够长的时间来分配所有地址。 IPv6 还在使用 SLAAC 时将 48 位 MAC 转换为 64 位数字,并且 IEEE 使用新的 64 位 EUI 改进了 48 位 MAC。当然,今天还没有办法真正使用 /64 中的每个地址,但 IPv6 旨在为未来留出空间。
  • 哦,对了。出于某种原因,我认为问题是关于设备,而不是地址。尽管如此,答案仍然“毫无意义,因为足够了”,只是推理不同。
【解决方案2】:

试试ip6 npm 包:https://www.npmjs.com/package/ip6

ip6 有助于规范化、缩写、划分子网、生成随机子网/主机以及计算 IPv6 子网的大小范围。

let ip6 = require('ip6');
console.log(ip6.range('2001:280:0:0:0:0:0:0', 32));
{ start: '2001:0280:0000:0000:0000:0000:0000:0000',
  end: '2001:0280:ffff:ffff:ffff:ffff:ffff:ffff',
  size: 7.922816251426434e+28 }

或者在命令行中:

ip6 -R 2001:280:0:0:0:0:0:0 32
{"start":"2001:0280:0000:0000:0000:0000:0000:0000","end":"2001:0280:ffff:ffff:ffff:ffff:ffff:ffff","size":7.922816251426434e+28}

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 2015-04-20
    • 2020-10-19
    • 2017-08-30
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多