如何在Javascript中从IPv6前缀生成IPv6掩码?



实现在javascript/typescript中将IPv6 Prefix(0 ~ 128)转换为对应的掩码(ffff:ffff style)的功能。

例子:


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;
}

最新更新