给出开始和结束IP地址的网络掩码

时间:2015-02-05 19:24:35

标签: javascript netmask

我需要在javascript中计算子网中块的开始和结束IP地址的网络掩码。我利用了这个答案https://stackoverflow.com/a/8872819/664479

起始地址为ac164980,结束地址为ac16498e

var scope = ipScope;
var s = parseInt("0x"+startAddress ,16);
var e = parseInt("0x"+endAddress ,16);
var m = parseInt("0xFFFFFFFF",16);

var nm = ""+(m ^ s ^ e);

我期待FFFFFFC0,但得到了-15

我哪里出错?

2 个答案:

答案 0 :(得分:0)

您需要在结尾处将结果转换回十六进制字符串(decimalToHexString函数取自:https://stackoverflow.com/a/697841/932282):

function decimalToHexString(number)
{
    if (number < 0)
    {
        number = 0x100000000 + number;
    }
    return number.toString(16).toUpperCase();
}

var startAddress = "ac164980",
    endAddress = "ac16498e";

var s = parseInt("0x"+startAddress, 16);
var e = parseInt("0x"+endAddress, 16);
var m = parseInt("0xFFFFFFFF", 16);

var nm = decimalToHexString(m ^ s ^ e);

但结果是FFFFFFF1

答案 1 :(得分:0)

这里实际上有两个问题。第一个是使用startIP和endIP的计算假设。

它应该是startIP和endIP所在子网的scopeSize

第二个是表示返回的负值。那是固定的:

var nm = (0xFFFFFFFF + (-1 ^(scope-1)) +1).toString(16).toUpperCase();