我随手写点吧,不保证可用:function makeip($c, $d)
{
    return "192.168.$c.$d";
}for ($i = 0, $succeeds = array(); $i < 256; $i ++)
{
    for ($j = 0; $j < 256; $j ++)
    {
        $ip = makeip($i, $j);
        if(fsockopen($ip, 80));
        {
            $succeeds[] = $ip;
        }
    }
}说一下,原理就是利用socket去打开指定IP机器的系统级服务端口,像80,当然还有其它的.
只要打开成功,就算该机器存在.当然,还有别的办法,比如直接查询IP等.

解决方案 »

  1.   

    <?php
    function listIP($start_ip, $end_ip)
    {
    $ip1=preg_split("/\./", $end_ip);
    if (count($ip1)!=4) return;
    for ($i=0;$i<4;$i++)
    if ($ip1[$i]<0||$ip1[$i]>255) return;
    $ip=preg_split("/\./", $start_ip);
    if (count($ip)!=4) return;
    for ($i=0;$i<4;$i++)
    if ($ip[$i]<0||$ip[$i]>255) return;
    for ($i=0;$i<4;$i++)
    {
    if ($ip[$i]<$ip1[$i]) break;
    if ($ip[$i]>$ip1[$i]) return;
    }
    do
    {
    $s=$ip[0].".".$ip[1].".".$ip[2].".".$ip[3];
    $fp=fsockopen("udp://$s", 13);
    if ($fp)
    {
    fclose($fp);
    echo "<div>$s</div>";
    }
    for ($i=4;$i>0;)
    {
    $i--;
    if ($ip[$i]<255)
    {
    $ip[$i]++;
    break;
    }
    $ip[$i]=0;
    }
    }
    while($s!=$end_ip);
    }
    listIP("192.168.0.1", "192.169.2.3");
    ?>
      

  2.   

    <?php
    $start=microtime();
    listip("10.1.228.200","10.1.229.30");
    print "<br/>";
    print "执行时间".((microtime()-$start)*1000)."ms";function listip($startIP,$endIP)
    {
     $startIP=ip2long($startIP);
     $endIP=ip2long($endIP);
     for($i=$startIP;$i<=$endIP;$i++){
       print long2ip($i)."<br>";
     }
    }
    ?>