根据ip/掩码格式地址段得到起始地址和结束地址

需求:给出ip/掩码的形式,求出起始地址和结束地址,例如6.61.252.0/24的起始地址为6.61.252.1,结束地址为6.61.252.254。

代码:因为我是在页面做处理,所以写的是js代码

1、计算起始地址
传入的参数第一个为ip,比如例子中的6.61.252.0。第二个参数为掩码的ip格式,例子中给出的是整数形式,需要进行转换,转换代码见下面

/**
 * 计算子网起始地址(不包括网络地址)
 * 
 */
function getLowAddr(ip, netMask){
    var lowAddr = "";
    var ipArray = new Array();
    var netMaskArray = new Array();
    // I参数不正确
    if (4 != ip.split(".").length || "" == netMask)
    {
        return "";
    }
    for (var i = 0; i < 4; i++)
    {
        ipArray[i] = ip.split(".")[i];
        netMaskArray[i] = netMask.split(".")[i];
        if (ipArray[i] > 255 || ipArray[i] < 0 || netMaskArray[i] > 255
                && netMaskArray[i] < 0)
        {
            return "";
        }
        ipArray[i] = ipArray[i] & netMaskArray[i];
    }
    // 构造最小地址
    for (var i = 0; i < 4; i++)
    {
        if(i == 3){
            ipArray[i] = ipArray[i] + 1;
        }
        if ("" == lowAddr){
            lowAddr +=ipArray[i];
        } else{
            lowAddr += "." + ipArray[i];
        }
    }
    return lowAddr;
}

2、计算结束地址

/**
 * 计算子网终止地址(不包括广播地址)
 */
function getHighAddr(ip,netMask){
    var lowAddr = getLowAddr(ip,netMask);
    var hostNumber = getHostNumber(netMask);
    if("" == lowAddr || hostNumber == 0){
        return "";
    }

    var lowAddrArray = new Array();
    for(var i = 0; i < 4; i++){
        lowAddrArray[i] = lowAddr.split(".")[i];
        if(i == 3){
            lowAddrArray[i] = Number(lowAddrArray[i] - 1);
        }
    }
    lowAddrArray[3] = lowAddrArray[3] + Number(hostNumber - 1);
    //alert(lowAddrArray[3]);
    if(lowAddrArray[3] > 255){
        var k = parseInt(lowAddrArray[3] / 256);
        //alert(k);
        lowAddrArray[3] = lowAddrArray[3] % 256;
        //alert(lowAddrArray[3]);
        lowAddrArray[2] = Number(lowAddrArray[2]) + Number(k);
        //alert(lowAddrArray[2]);
        if(lowAddrArray[2] > 255){
            k = parseInt(lowAddrArray[2] / 256);
            lowAddrArray[2] = lowAddrArray[2] % 256;
            lowAddrArray[1] = Number(lowAddrArray[1]) + Number(k);
            if(lowAddrArray[1] > 255){
                k = parseInt(lowAddrArray[1] / 256);
                lowAddrArray[1] = lowAddrArray[1] % 256;
                lowAddrArray[0] = Number(lowAddrArray[0]) + Number(k);
            }
        }
    }

    var highAddr = "";
    for(var i = 0; i < 4; i++){
        if(i == 3){
            lowAddrArray[i] = lowAddrArray[i] - 1;
        }
        if("" == highAddr){
            highAddr = lowAddrArray[i];

        }else{
            highAddr += "." + lowAddrArray[i];
        }
    }

    return highAddr;
}

3、获取主机数

/**
 * 获取主机数
 * 
 * @param netMask
 * @returns {Number}
 */
function getHostNumber(netMask){
    var hostNumber = 0;
    var netMaskArray = new Array();
    for(var i = 0; i < 4; i++){
        netMaskArray[i] = netMask.split(".")[i];
        if(netMaskArray[i] < 255){
            hostNumber = Math.pow(256,3-i) * (256 - netMaskArray[i]);
            break;
        }
    }

    return hostNumber;
}

4、将整数形式的掩码转换成ip格式

/**
     * 转换掩码的格式
     */
    function getNetMask(inetMask){
        var netMask = "";
        if(inetMask > 32){
            return netMask;
        }
        //子网掩码为1占了几个字节
        var num1 = parseInt(inetMask / 8);
        //子网掩码的补位位数
        var num2 = inetMask % 8;
        var array = new Array();
        for(var i = 0; i < num1; i++){
            array[i] = 255;
        }
        for(var i = num1; i < 4; i++){
            array[i] = 0;
        }
        for(var i = 0; i < num2; num2--){
            array[num1] += Math.pow(2,8-num2);
        }
        netMask = array[0] + "." + array[1] + "." + array[2] + "." + array[3];

        return netMask;
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值