Как увеличить IP-адрес - PullRequest
0 голосов
/ 29 июня 2018

Как увеличить IP-адрес следующим образом:

0.0.0.0
0.0.0.1
...
0.0.0.255
0.0.1.0
0.0.1.1
...
0.0.255.0
0.1.0.0
0.1.0.1
...
0.1.0.255
0.1.1.0
...
0.1.255.0
0.1.255.1
0.1.255.2
...
0.2.0.0
...

Моя попытка дает мне правильные первые два хвостовых узла, но все, кроме этого, дает неправильный вывод.

function increment_ip(input) {
  var iparray = input.concat()
  var output = []
  var i = iparray.length
  var inc = false

  while (i--) {
    var count = iparray[i]
    if (count < 255) {
      output.unshift(count)
      if (!inc) {
        iparray[i] = iparray[i] + 1
        inc = true
      }
    } else {
      iparray[i] = 0
      output.unshift(0)
      if (i - 1 > -1) {
        iparray[i - 1] = iparray[i - 1] + 1
      }
    }
  }

  return output
}

1 Ответ

0 голосов
/ 29 июня 2018

Вместо того, чтобы моделировать IP-адрес как массив, смоделируйте его как одно число.

Каждый октет можно извлечь с помощью маски и сдвига.

var ip = (input[0] << 24) | (input[1] << 16) | (input[2] << 8) | (input[3] << 0)
ip++
return [ip & 0xff000000 >> 24, ip & 0x00ff0000 >> 16, ip & 0x0000ff00 >>, ip & 0x000000ff]
...