преобразовать краткую нотацию ip в нотацию CIDR - PullRequest
0 голосов
/ 05 ноября 2019

Предположим, у меня есть список, подобный приведенному ниже (в массиве $ ips), который включает в себя простые ip-адреса и ip в стиле короткой записи ip.

125.45.
201.35.1.
35.89.18.27
101.135.2
222.122
78.56.21.146

как преобразовать их в диапазон дефисов ip с помощью php?

т.е. результат должен быть

125.45.0.0-125.45.255.255
201.35.1.0-201.35.1.255
35.89.18.27
101.135.2.0-101.135.2.255
222.122.0.0-222.122.255.255 
78.56.21.146

1 Ответ

1 голос
/ 05 ноября 2019

Обратите внимание, что я сделал это как забавный эксперимент. Ваш вопрос был немного расплывчатым, и вы не пытались сделать это самостоятельно. При этом, эта функция должна выполнять то, что вы хотите. Позвольте мне объяснить, что он делает:

Во-первых, проверяет, является ли последний символ в ip точкой, и удаляет его.

Во-вторых, подсчитайте количество диапазонов, которые имеет ваш IP.

В-третьих, используйте оператор switch/case (чище, чем if elseif IMHO), чтобы определить, что делать со строкой, на основе диапазона IP-адресов.

Наконец, определите начальный диапазон и конечный диапазон и объедините их.

Наконец, верните результат.

<?php

$ips = array();


$ips[0] = '125.45.';
$ips[1] = '201.35.1.';
$ips[2] = '101.135.2';
$ips[3] = '222.122';
$ips[4] = '78.56.21.146';


foreach($ips as $ip){

echo "\n\nNEW IP RANGE: " . convert_ip($ip) . "\n\n";

}

function convert_ip($ip){

$ip = rtrim($ip, '.');

$ip_count = count( explode('.', $ip) );

switch ($ip_count) {

    case 1:

        $starting_ip = $ip . '.0.0.0';

        $ending_ip = $ip . '.255.255.255';

        $return_ip = "$starting_ip-$ending_ip";

        break;
    case 2:

        $starting_ip = $ip . '.0.0';

        $ending_ip = $ip . '.255.255';

        $return_ip = "$starting_ip-$ending_ip";

        break;
    case 3:

        $starting_ip = $ip . '.0';

        $ending_ip = $ip . '.255';

        $return_ip = "$starting_ip-$ending_ip";

        break;
    case 4:

        $return_ip = $ip;

        break;

    default:
        $return_ip = 'Unknown';
}

return $return_ip;

}

?>

НОВЫЙ РЯД IP: 125.45.0.0-125.45.255.255

НОВЫЙ РЯД IP: 201.35.1.0-201.35. 1.255

НОВЫЙ IP-ДИАПАЗОН: 101.135.2.0-101.135.2.255

НОВЫЙ IP-ДИАПАЗОН: 222.122.0.0-222.122.255.255

НОВЫЙ IP-ДИАПАЗОН: 78.56.21.146

...