最近遇到一個頗有意思的點,因而就記錄下來。 網絡
CIDR通常是由IP地址和子網掩碼組成,即 IP地址/子網掩碼 格式。ide
子網掩碼錶示前面地址中的前多少位,爲網絡位,後面部分表明主機部分。例如:192.168.12.13/18,把192.168.12.13中的 每一位轉爲二進制後是 「11000000 10101000 00001100 00001101」,其中「/18」中的18表示「11000000 10101000 00001100 00001101」的前18位(共32位),剩餘部分爲主機部分。spa
直接上方法,本方法不支持網絡位全爲 0的CIDR,建議加上過濾條件:blog
getCIDRMessage(cidrValue) { let value =cidrValue.split('/'); //校驗IPv4格式 let ipv4test = /(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))/; if (!ipv4test.test(value[0])) { return { key: 'IPv4格式不正確' } } let val = value[0].split('.'); const sub = 32 - value[1]; let a11 = (parseInt(val[0]) << 24) | (parseInt(val[1]) << 16) | (parseInt(val[2]) << 8) | (parseInt(val[3]) << 0); console.log(value + '--> a11 :--->' + a11); a11 = a11 >> sub << sub; const ipSart = a11; const ipEnd = a11 + (1 << sub) - 1; //開始地址 let rightStartIp = (ipSart >> 24 & 255) + '.' + (ipSart >> 16 & 255) + '.' + (ipSart >> 8 & 255) + '.' + (ipSart >>> 0 & 255); //結束地址 let rightEndIp = (ipEnd >> 24 & 255) + '.' + (ipEnd >> 16 & 255) + '.' + (ipEnd >> 8 & 255) + '.' + (ipEnd >>> 0 & 255); //如今想要手動設定一個地址範圍,好比只想要45個地址 let ipRangeByHand = (a11 >>> 0 ) + 45; let setRange = (ipRangeByHand >>> 24) + "." + (ipRangeByHand >> 16 & 0xFF) + "." + (ipRangeByHand >> 8 & 0xFF) + "." + (ipRangeByHand >> 0 & 0xFF); console.log('rightStartIp :--->' + rightStartIp); console.log('rightEndIp :--->' + rightEndIp); console.log('setRange :--->' + setRange); }
例如,擋在輸入框內輸入「3.3.3.3/24」,其地址範圍通過計算是「3.3.3.0-----3.3.3.255」。結果如 下面截圖:ip
若有問題,請指出。本文到這裏就暫時結束了,轉載請註明出處。謝謝~~~~ci
好好作人,認真生活。get