简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM