[英]How to Generate IPv6 Mask from IPv6 Prefix in Javascript?
Implement a function to convert IPv6 Prefix ( 0 to 128 ) to the corresponding mask (ffff:ffff style) in javascript / typescript.实现 function 将 IPv6 前缀(0 到 128)转换为 javascript / typescript 中相应的掩码(ffff:ffff 样式) 。
Examples:例子:
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'
The following program converts the given prefix to IPv6 Mask.以下程序将给定的前缀转换为 IPv6 掩码。
I was using http://ip-address.js.org/#address6 for other IP Validations, but it doesn't have this mask conversion function.我正在使用http://ip-address.js.org/#address6进行其他 IP 验证,但它没有此掩码转换 function。
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.