2

JavaScript の CIDR および NETMASK との間で変換する関数の例が何百も見つかると期待していましたが、何も見つかりませんでした。

NETCTLを使用してマシンのIPアドレスを設定および取得するnodejsページで、CIDRとNETMASKSとの間で変換する必要があります。

javascript / nodejsを使用してこれを行う簡単な解決策はありますか??

4

5 に答える 5

4

このコードは解決策を提供する可能性があります:

var mask = "255.255.248.0";
var maskNodes = mask.match(/(\d+)/g);
var cidr = 0;
for(var i in maskNodes)
{
  cidr += (((maskNodes[i] >>> 0).toString(2)).match(/1/g) || []).length;
}
return cidr;
于 2015-09-08T11:11:39.290 に答える
3
    NETMASK                        BINARY               CIDR
255.255.248.0       11111111.11111111.11111000.00000000 /21
255.255.0.0         11111111.11111111.00000000.00000000 /16 
255.192.0.0         11111111.11000000.00000000.00000000 /10

これが CIDR の計算方法です。つまり、1 2 番目の列での出現です。したがって、次のように読み取り可能なアルゴリズムを設計します。

const masks = ['255.255.255.224', '255.255.192.0', '255.0.0.0']; 
/**
* Count char in string
*/
const countCharOccurences = (string , char) => string.split(char).length - 1;

const decimalToBinary = (dec) => (dec >>> 0).toString(2);
const getNetMaskParts = (nmask) => nmask.split('.').map(Number);
const netmask2CIDR = (netmask) => 
   countCharOccurences(
     getNetMaskParts(netmask)
      .map(part => decimalToBinary(part))
      .join(''),
    '1'   
  );    


masks.forEach((mask) => {
  console.log(`Netmask =${mask}, CIDR = ${netmask2CIDR(mask)}`)
})

于 2017-03-24T03:41:20.967 に答える