我期待找到数百个函数示例来转换为CIDR和NETMASK for javascript,但无法找到任何函数。
我需要在nodejs页面上与CIDR和NETMASKS进行转换,该页面使用NETCTL设置和检索机器的IP地址。
使用javascript / nodejs做任何简单的解决方案??
答案 0 :(得分: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;
答案 1 :(得分:2)
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 ..所以,它是第二个cloumn中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)}`)
})

答案 2 :(得分:2)
我知道问这个问题已经很久了,但是我只是想添加检查以确保网络掩码有效:
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
}
由于掩码仅在1中的位从左向右移动时才有效,因此该条件将检查在0中的第一位之后没有位为1。它还会检查每个组是0还是128-255
转换方法与其他答案基本相同
答案 3 :(得分:1)
鉴于您已经提到使用node.js来实现这一点,我假设您正在寻找一种在javascript中运行此服务器端的方法,而不是客户端。如果这是正确的,netmask npm模块是否涵盖了您需要做的事情?
答案 4 :(得分:0)
这里是一个不检查网络掩码是否有效的人:
const netmaskToCidr = n => n
.split('.')
.reduce((c, o) => c - Math.log2(256 - +o), 32)