/**
* 计算网段
* @param ip {String} 网址,例如 "10.10.10.10"
* @param mask {String} 子网掩码,例如 "255.255.255.255"
* @returns segment {String} 网段,完整的32位string
*/
function countSegment (ip, mask) {
/** 将ip和子网掩码转为2进制,并补足8位数(ip数最大为255,对应的2进制数为11111111) */
const ip32 = ip.split('.').map(v => addZeroToEightUnit(parseInt(v).toString(2))).join('')
const nm32 = mask.split('.').map(v => addZeroToEightUnit(parseInt(v).toString(2))).join('')
let segment = ''
for (let i = 0; i < 32; i++) {
// 网段对应的是ip和子网掩码的“与”关系
segment += parseInt(ip32[i]) & parseInt(nm32[i])
}
return segment
}
/**
* 将字符串向前补0到8位
* @param str {String} 要补位的字符串
*/
function addZeroToEightUnit (str) {
const strLength = str.length
const arr = new Array(8).fill('0').splice(8 - strLength, strLength, str)
return arr.join('')
}
js使用ip和子网掩码计算所在网段
于 2022-03-26 18:11:40 首次发布