派生给定起始和结束IP地址的网络掩码

Derive Netmask given start and end IP addresses

本文关键字:地址 IP 网络 掩码 结束 派生      更新时间:2023-09-26

我需要用javascript计算给定子网中块的起始和终止ip地址的网络掩码。我利用了这个答案https://stackoverflow.com/a/8872819/664479和

具有ac164980的startAddress和ac16498e的endAddress

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

我哪里错了?

您需要将结果转换回末尾的十六进制字符串(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

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

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

第二个是返回的负值的表示。已修复:

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