Генерация ip по списку диапазонов

Тема в разделе "Как сделать...", создана пользователем zilon, 23 фев 2013.

Статус темы:
Закрыта.
  1. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    подскажите пожалуйста, как сгенерить диапазон всех ip адресов например с 202.70.112.0 по 202.70.127.255 ? По сути, надо в цикле сравнить последние цифры в ip адресе и увеличивать на единицу если они разные и выводить пока 255 не будет. Потом сравнивать предпоследние цифры, и увеличивать на единицу, а последние увеличивать на единицу 255 раз и так далее. А как это сделать :nezn:

    получается только с последними цифрами


    PHP:
    <?php
     
    if(isset($_POST['ip_stran']))
     
    {
     
    switch (
    $_POST['ip_stran'])
     
    {
     
    case 
    "amirikan-samoa":
    $_file "http://www.proxysecurity.com/ip-address-range.php?country=AMERICAN+SAMOA";
    break;
     
    }
     
    echo 
    "страница с диапазоном - <a href='$_file' target='blank'>$_file</a><br><br>";
     
    $stringg $_file;
    $stringg iconv ("CP1251""UTF-8"$stringg);
    //$stringg = explode(" &#8211; ", $stringg);
    $stringg explode("</td>"$stringg);
     
    foreach (
    $stringg as $urlded) {
     
    $string file_get_contents($urlded);
    //preg_match_all("/([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})/s", $string, $found);
    $massiv preg_match_all("/([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}) &#8211; ([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})/s"$string$found);
    $total sizeof($found[1]);
    for(
    $i=0$i<$total$i++) {
    //$ip = $found[1][$i].'.'.$found[2][$i].'.'.$found[3][$i].'.'.$found[4][$i];
    $ip $found[1][$i].'.'.$found[2][$i].'.'.$found[3][$i].'.'.$found[4][$i].' - '.$found[5][$i].'.'.$found[6][$i].'.'.$found[7][$i].'.'.$found[8][$i];
     
    $_ip1 $found[1][$i];
    $_ip2 $found[2][$i];
    $_ip3 $found[3][$i];
    $_ip4 $found[4][$i];
    $_ip5 $found[5][$i];
    $_ip6 $found[6][$i];
    $_ip7 $found[7][$i];
    $_ip8 $found[8][$i];
     
    echo 
    "диопазон ip - $ip. <br><br>";
     
    for (
    $_ip4==$_ip8$_ip4<=$_ip8$_ip4++)
    echo 
    "$_ip1.$_ip2.$_ip3.$_ip4<br>";
    echo 
    '<br>';
     
    }
    }
     
    echo 
    '<br>всего диапазонов - ';
    print_r($massiv);
     
    }
     
    else
     
    {
     
    echo
    "
     
    <form name='form' method='post' action=''>
     
    <p>ip страны</p>
    <p>
    <select name='ip_stran' size=1>
    <option value=amirikan-samoa>Американ Самоа</option>
    </select>
    </p>
     
    <p></p>
    <input type='submit' value='Заебенить'>
     
    </form>
     
    "
    ;
     
    }
     
    ?>
     
  2. puagardian

    puagardian One Love

    Moderator
    Регистр.:
    16 июл 2012
    Сообщения:
    433
    Симпатии:
    558
    zilon нравится это.
  3. ВладимирТрой

    ВладимирТрой Постоялец

    Регистр.:
    29 янв 2013
    Сообщения:
    53
    Симпатии:
    19
    какие-то хардкоровские решения по ссылке, вот простой примерчик:
    PHP:
    $ip_from"202.70.112.0";
    $ip_to"202.70.115.255";
     
    $ip_toexplode ("."$ip_to);
     
    $ip_fromexplode ("."$ip_from);
    $ip_fromarray_reverse ($ip_from);
     
    while (
    true) {
        foreach (
    $ip_from as $key => $value) {
            if (
    $value+255) {
                
    $ip_from[$key] = 0;
                continue;
            }
            
    $ip_from[$key]++;
            break;
        }
        
    $ip_real array_reverse ($ip_from);
     
        
    print_r(implode("."$ip_real));
     
       
    $stop true;
       foreach (
    $ip_real as $key => $value) {
           if (
    $value $ip_to[$key]) {
               
    $stop false;
           }
       }
     
       if (
    $stop) {
           break;
       }
    }
     
    zilon нравится это.
  4. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
Статус темы:
Закрыта.