javascript - 如何从 Javascript 中的 IPv6 前缀生成 IPv6 掩码?
问题描述
在 javascript / typescript 中实现一个函数,将 IPv6 前缀(0 到 128)转换为相应的掩码(ffff:ffff 样式) 。
例子:
33 => 'ffff:ffff:8000:0000:0000:0000:0000:0000'
128 => 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'
118 => 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:fc00'
解决方案
以下程序将给定前缀转换为 IPv6 掩码。
我使用http://ip-address.js.org/#address6进行其他 IP 验证,但它没有此掩码转换功能。
const HEX = 16;
const BINARY = 2;
const MAX_PREFIX = 128;
const MIN_PREFIX = 0;
/**
*
* @param prefix
* @returns ipv6 netmask address
*
* Fill an array with 1s for given number of prefix bits
* Fill the remaining bits with 0s
* chunk it with 16 elements and covert each chunk to hex
*
*/
static getNetmaskForPrefix(prefix: number): string {
const prefixArr: number[] = new Array(prefix).fill(1);
const chunkArr = Array.from({
length: Math.ceil(prefixArr.length / HEX),
}, (_v, i) => prefixArr.slice(i * HEX, i * HEX + HEX));
// Converting from binary to hex
let subnet = chunkArr.map((item) => {
return parseInt(item.join('').padEnd(HEX, '0'), BINARY).toString(HEX);
}).join(':');
if (subnet.length < 35) {
subnet = `${subnet}::`;
}
return subnet;
}
推荐阅读
- facebook - 没有获得对 Facebook 帖子发表评论的 webhook
- snowflake-cloud-data-platform - Snowflake- MERGE t1 into t2 后,如何确保下次运行 MERGE 时,t1 中的旧记录不会再次合并?
- shell - 如何将此 AWK 函数放入 for 循环中以提取列?
- nginx - 使用包含指令时,此处不允许使用 Nginx 错误位置指令
- javascript - 与 React 中的另一个数组相比,检查和显示数组的值
- r - 在ggplot2中将legend.text显示为整数而不是十进制数
- python - 无法在 Django 中解决 NoReverseMatch at / 错误
- excel - 带字母和数字的自动增量?
- python - 导入包含类定义的 Python 模块时如何提供参数?
- python - 在python中拟合多元curve_fit(逻辑函数)