我原以为能找到数百个函数的例子来转换为JavaScript的CIDR和NETMASK,但没有找到。我需要在nodejs页面上转换CIDR和NETMASKS,该页面使用NETCTL设置和检索计算机的IP地址。有没有使用javascript / nodejs?的简单解决方案?
mzmfm0qo1#
此代码可提供解决方案:
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;
dojqjjoe2#
下面是一个不检查网络掩码是否有效的方法:
const netmaskToCidr = n => n .split('.') .reduce((c, o) => c - Math.log2(256 - +o), 32)
6pp0gazn3#
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在第二列中的出现次数。因此,我设计了一个可读的算法,如下所示:
1
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)}`) })
z9ju0rcb4#
我知道这个问题已经提出很久了,但我只是想添加检查以确保网络掩码有效由于掩码仅在1中的位从左向右排列时有效,因此条件会检查0中的第一位之后没有位为1。它还会检查每个组是否为0或128-255转换的方法与其他答案基本相同
function mask2cidr(mask) { var cidr = '' for (m of mask.split('.')) { if (parseInt(m) > 255) { throw 'ERROR: Invalid Netmask' } // Check each group is 0-255 if (parseInt(m) > 0 && parseInt(m) < 128) { throw 'ERROR: Invalid Netmask' } cidr += (m >>> 0).toString(2) } // Condition to check for validity of the netmask if (cidr.substring(cidr.search('0'), 32).search('1') !== -1) { throw 'ERROR: Invalid Netmask ' + mask } return cidr.split('1').length - 1 } console.log(mask2cidr("255.255.248.0"))
kiz8lqtg5#
鉴于你提到了使用node.js来实现这个,我假设你正在寻找一种在javascript中运行服务器端而不是客户端的方法,如果这是正确的,netmask npm模块涵盖了你需要做的事情吗?
5条答案
按热度按时间mzmfm0qo1#
此代码可提供解决方案:
dojqjjoe2#
下面是一个不检查网络掩码是否有效的方法:
6pp0gazn3#
这就是计算CIDR的方法。因此,它是
1
在第二列中的出现次数。因此,我设计了一个可读的算法,如下所示:z9ju0rcb4#
我知道这个问题已经提出很久了,但我只是想添加检查以确保网络掩码有效
由于掩码仅在1中的位从左向右排列时有效,因此条件会检查0中的第一位之后没有位为1。它还会检查每个组是否为0或128-255
转换的方法与其他答案基本相同
kiz8lqtg5#
鉴于你提到了使用node.js来实现这个,我假设你正在寻找一种在javascript中运行服务器端而不是客户端的方法,如果这是正确的,netmask npm模块涵盖了你需要做的事情吗?