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”。结果如 下面截图:
如有问题,请指出。本文到这里就暂时结束了,转载请注明出处。谢谢~~~~
好好做人,认真生活。
好好做人,认真生活。