IP и подсеть для запуска IP конца IP

Таким образом, у меня есть IP с Подсетью как: 8.8.8.0/24

Как я могу преобразовать это в 8.8.8.0 и 8.8.8.255 (на самом деле их ip2long результанты)

В PHP и JavaScript

13
задан steven 8 January 2010 в 06:51
поделиться

3 ответа

Просто относитесь к каждому IP как к 4-значному числу с основанием 256. Например,

8.8.8.0   == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 0 * 256^0   == 134744064
8.8.8.1   == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 1 * 256^0   == 134744065
8.8.8.1   == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 2 * 256^0   == 134744066
...
8.8.8.255 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 255 * 256^0 == 134744319
0
ответ дан 2 December 2019 в 00:18
поделиться

Думаю, это может быть то, к чему вы клоните. Он определит все IP-адреса в заданном диапазоне.

$ip = '8.8.8.0';
$mask = 24;

$ip_enc = ip2long($ip);
# convert last (32-$mask) bits to zeroes
$curr_ip = $ip_enc | pow(2, (32-$mask)) - pow(2, (32-$mask));
$ips = array();

for ($pos = 0; $pos < pow(2, (32-$mask)); ++$pos) {
    $ips []= long2ip($curr_ip + $pos);
}
-1
ответ дан 2 December 2019 в 00:18
поделиться

Я предполагаю, что вам также понадобится другая маска, например 8,16, ...

ip="8.8.8.0/24"
  1. извлеките каждую часть ip_array = ip.match (/ (\ d +) \. (\ d +) \. (\ d +) \. (\ d +) \ / (\ d +) /) // js regex

  2. преобразовать в число ip_num = (ip [1] << 24 ) + (ip [2] << 16) + (ip [3] << 8) + (+ ip [4]) // # 0x08080800

  3. mask = (1 << (32-ip [ 5])) - 1 // # 0xFF

  4. ip_num | маска будет 0x080808FF, что составляет 8.8.8.255

  5. ip_num & (0xffffffff ^ mask) будет 0x08080800, что составляет 8.8.8.0

  6. , вам нужно преобразовать ip_num обратно в ip string back

8
ответ дан 2 December 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: