2013-10-23 39 views
1

我曾期待找到數百個函數的例子來轉換爲CIDR和NETMASK for javascript,但無法找到任何。Javascript NETMASK和CIDR轉換

我需要在nodejs頁面上爲CIDR和NETMASKS轉換和使用NETCTL設置和檢索計算機的IP地址。

任何簡單的解決方案,使用javascript/nodejs做到這一點?

回答

1

鑑於您已經提到使用node.js來實現這一點,我假設您正在尋找一種方法來在JavaScript中運行此服務器端,而不是客戶端。如果這是正確的,netmask npm模塊是否覆蓋了你需要做的事情?

1

該代碼可以提供一個解決方案:

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
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第二cloumn的發生。因此,我設計如下可讀算法:

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