有兴趣制作一个PHP脚本,将IP地址从定义的起始地址增加到定义的结束地址

ale*_*xis 4 php ip-address range

我知道我可以通过转换IP地址到十进制表示首先使用PHP内置的功能,如轻松地做到这一点up2longlong2ip.我只是希望能够使用标准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条件内建立一个嵌套循环,直到起始地址的第一个八位字节与结束地址的第一个八位字节匹配.然后为第二个八位字节执行相同的代码块,依此类推,直到程序到达结束地址并完成.

我刚刚开始学习编程,所以很有可能我的思考和编写代码远非优雅.如果你是这样的话,你会怎么做?

cod*_*ict 6

像这样的东西:

<?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]++;
            }
        }
    }
}

?>
Run Code Online (Sandbox Code Playgroud)


小智 5

这要简单得多:

<?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++;
}

?>
Run Code Online (Sandbox Code Playgroud)