Как из короткой записи диапазона IP адресов получить полный список (Php / CIDR)

05.02.2024

Иногда нужно из записи IP вида 109.248.12.0/23 получить полный список IP (новый IP - новая строка).

 
<?php

function cidrToRange($cidr) {
    $range = array();
    $cidr = explode('/', $cidr);
    $range[0] = long2ip((ip2long($cidr[0])) & ((-1 << (32 - (int)$cidr[1]))));
    $range[1] = long2ip((ip2long($range[0])) + pow(2, (32 - (int)$cidr[1])) - 1);
    return $range;
}

function cidrRangeToArray($from, $to) {
    $start = ip2long($from);
    $end = ip2long($to);
    $range = range($start, $end);
    return array_map('long2ip', $range);
}

$aRange = cidrToRange("109.248.12.0/23");


$aInRanges = explode("\n", file_get_contents( __DIR__ . "out.txt"));


Яндекс.Метрика