IPv4:根據CIDR顯示地址范圍


最近遇到一個很有意思的點,於是就記錄下來。 

CIDR一般是由IP地址和子網掩碼組成,即 IP地址/子網掩碼 格式。

子網掩碼表示前面地址中的前多少位,為網絡位,后面部分代表主機部分。例如:192.168.12.13/18,把192.168.12.13中的 每一位轉為二進制后是  “11000000  10101000  00001100  00001101”,其中“/18”中的18表示“11000000  10101000  00001100  00001101”的前18位(共32位),剩余部分為主機部分。

 

直接上方法,本方法不支持網絡位全為 0的CIDR,建議加上過濾條件:

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”。結果如 下面截圖:

 

 

 

 

 

 

如有問題,請指出。本文到這里就暫時結束了,轉載請注明出處。謝謝~~~~

 

好好做人,認真生活。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM