【问题标题】:Derive Netmask given start and end IP addresses派生给定开始和结束 IP 地址的网络掩码
【发布时间】:2015-02-07 03:40:22
【问题描述】:

我需要在给定子网中的块的开始和结束 IP 地址的情况下,用 JavaScript 计算网络掩码。我利用了这个答案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

我哪里出错了?

【问题讨论】:

  • 一开始你没有在最后将你的整数转换回十六进制。

标签: javascript netmask


【解决方案1】:

你需要在最后将结果转换回十六进制字符串(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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 2013-03-03
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 2015-05-16
      • 2013-11-12
      相关资源
      最近更新 更多