Заинтересован в создании PHP-скрипта, который увеличивает IP-адрес с определенного начального адреса до определенного конечного адреса - PullRequest
4 голосов
/ 26 декабря 2009

Я знаю, что могу сделать это легко, сначала преобразовав IP-адреса в десятичную запись, используя встроенные функции PHP, такие как up2long и long2ip. Я просто хочу сделать то же самое, используя стандартную запись IP-адреса в качестве упражнения.

Проблема, о которой я думаю, выглядит следующим образом: учитывая начальный IP-адрес, скажем, 192.168.1.100, и конечный IP-адрес, скажем, 201.130.22.10. Создайте программу, которая печатает все номера адресов в этом диапазоне (192.168.1.100, 192.168.1.101,…, 201.130.22.9, 201.130.22.10).

Я думал, что, возможно, можно было бы сделать вложенный цикл for внутри условия while, пока первый октет начального адреса не совпадет с первым октетом конечного адреса. Затем выполните тот же блок кода для второго октета и т. Д., Пока программа не достигнет конечного адреса и не завершится.

Я только недавно начал учиться программировать, поэтому вполне возможно, что мое мышление и / или написание кода далеко не изящны. Если бы вы были к этому, как бы вы это сделали?

Ответы [ 3 ]

6 голосов
/ 26 декабря 2009

Примерно так:

<?php

// works only for valid range
$start_ip = '10.0.0.1';
$end_ip = '10.0.20.1';

$start_arr = explode('.',$start_ip);
$end_arr = explode('.',$end_ip);

while($start_arr <= $end_arr)
{
    echo implode('.',$start_arr) . '<br>';

    $start_arr[3]++;
    if($start_arr[3] == 256)
    {
        $start_arr[3] = 0;
        $start_arr[2]++;
        if($start_arr[2] == 256)
        {
            $start_arr[2] = 0;
            $start_arr[1]++;
            if($start_arr[1] == 256)
            {
                $start_arr[1] = 0;
                $start_arr[0]++;
            }
        }
    }
}

?>
2 голосов
/ 03 августа 2016

Это гораздо менее сложно:

<?php

// works only for valid range
$start_ip = ip2long('10.0.0.1');
$end_ip = ip2long('10.0.20.1');

while($start_ip <= $end_ip){
  echo long2ip($start_ip).'<br>';
  $start_ip++;
}

?>
0 голосов
/ 25 января 2019
function getInBetweenIPs($startIP,$endIP){

    $subIPS = array();
    $start_ip = ip2long($startIP);
    $end_ip = ip2long($endIP);

    while($start_ip <= $end_ip){
        $subIPS[]=long2ip($start_ip);
        $start_ip++;
    }

    return $subIPS;
}
...