赞
踩
function calculateIPRange(ip, subnetMask) { // 将IP地址和子网掩码转换为二进制形式 const ipBinary = ip.split('.').map(part => parseInt(part, 10).toString(2).padStart(8, '0')).join(''); const subnetBinary = subnetMask.split('.').map(part => parseInt(part, 10).toString(2).padStart(8, '0')).join(''); // 对IP地址和子网掩码进行按位逻辑与操作 const networkBinary = ipBinary.split('').map((bit, index) => (bit === '1' && subnetBinary[index] === '1') ? '1' : '0').join(''); // 将逻辑与运算后的结果转换回十进制形式,得到IP网段的起始地址 const networkAddress = networkBinary.match(/.{8}/g).map(byte => parseInt(byte, 2)).join('.'); // 计算子网掩码中连续的1的个数,得到网络前缀长度 const prefixLength = subnetBinary.indexOf('0'); // 计算IP网段的结束地址 const hostBits = 32 - prefixLength; const endAddress = networkAddress.split('.').map(part => parseInt(part, 10)).reduce((result, octet, index) => { if (index === 3) { result.push(octet + Math.pow(2, hostBits) - 1); } else { result.push(octet); } return result; }, []).join('.'); // 返回IP网段表示法 return `${networkAddress}/${prefixLength} - ${endAddress}/${prefixLength}`; // return `${networkAddress}/${prefixLength}`; } // 示例用法 const ipRange = calculateIPRange('192.168.1.100', '255.255.255.0'); console.log(ipRange); // 输出:192.168.1.0/24 - 192.168.1.255/24
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。