当前位置:   article > 正文

根据ip及子网掩码得出网段_c语言根据ip掩码计算可用ip范围

c语言根据ip掩码计算可用ip范围
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/692259
推荐阅读
相关标签
  

闽ICP备14008679号