Javascript NETMASK和CIDR转换

我期待find数百个函数的例子来转换为CIDR和NETMASK的JavaScript,但无法find任何。

我需要在一个nodejs页面上使用CIDR和NETMASKS进行转换,该页面使用NETCTL设置和检索一台机器的IP地址。

任何简单的解决scheme,使用javascript / nodejs做到这一点?

鉴于你已经提到使用node.js来实现这一点,我假设你正在寻找一种方法来在JavaScript中运行此服务器端,而不是客户端。 如果这是正确的, netmask npm模块是否覆盖了你需要做的事情?

此代码可以提供一个解决scheme:

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; 
  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的出现。 因此,我devise了一个可读的algorithm如下:

 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)}`) })