IPv4:根據CIDR顯示地址範圍

最近遇到一個頗有意思的點,因而就記錄下來。 網絡

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

相關文章
相關標籤/搜索