Таким образом, у меня есть IP с Подсетью как: 8.8.8.0/24
Как я могу преобразовать это в 8.8.8.0 и 8.8.8.255 (на самом деле их ip2long результанты)
В PHP и JavaScript
Просто относитесь к каждому 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
Думаю, это может быть то, к чему вы клоните. Он определит все 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);
}
Я предполагаю, что вам также понадобится другая маска, например 8,16, ...
ip="8.8.8.0/24"
извлеките каждую часть ip_array = ip.match (/ (\ d +) \. (\ d +) \. (\ d +) \. (\ d +) \ / (\ d +) /)
// js regex
преобразовать в число ip_num = (ip [1] << 24 ) + (ip [2] << 16) + (ip [3] << 8) + (+ ip [4])
// # 0x08080800
mask = (1 << (32-ip [ 5])) - 1
// # 0xFF
ip_num | маска
будет 0x080808FF, что составляет 8.8.8.255
ip_num & (0xffffffff ^ mask)
будет 0x08080800, что составляет 8.8.8.0
, вам нужно преобразовать ip_num
обратно в ip string back