Получить списки ip в текстовый файл из диапазонов ip в текстовом файле

Тема в разделе "Как сделать...", создана пользователем silmarion, 20 июн 2014.

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

    silmarion

    Регистр.:
    21 июн 2012
    Сообщения:
    194
    Симпатии:
    19
    Добрый день, собственно, вопрос в теме.

    Как можно сделать?
    Имеем текстовый файл, с диапазонами ip
    Каждый диапазон с новой строки.

    Получить нужно текстовый файл, в котором все ip из всех диапазонов с новой строки

    Пример:
    Файл с диапазонами:
    192.168.1.1-192.168.1.255
    192.168.0.1-192.168.0.255

    Получить нужно:
    192.168.1.1
    192.168.1.2
    192.168.1.3
    192.168.1.4
    ...
    192.168.1.255
    192.168.0.1
    192.168.0.2
    192.168.0.3
    192.168.0.4
    ...
    192.168.0.255
     
  2. square.guy

    square.guy Писатель

    Регистр.:
    19 июн 2014
    Сообщения:
    3
    Симпатии:
    3
    Могу описать примерный алгоритм.
    Считываем строки, разбиваем на две подстроки через '-', чтобы получились начало и конец диапазона.
    Далее, есть замечательная функция перевода ip в числовое представление. Например, в php это делает функция ip2long. Эта функция, наверняка, есть и в других языках.
    Она вычисляется по формуле ip = (первая часть ip * 16777216) + (вторая часть * 65536) + (третья часть * 256) + (четвертая часть).
    Делаем перевод начала и конца диапазона в числовое значение, затем циклом перебираем инты и переводим их обратно в строковое представление.
     
    latteo нравится это.
  3. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    616
    Симпатии:
    488
    Дольше было писать алгоритм по-моему, чем сам код))

    Перейти по ссылке

    PHP:
    <html>
    <body>
    <form method=post action="">
       <textarea name="input" rows=10 cols=160><? if (isset($_POST['input'])) echo $_POST['input']?></textarea><br>
       <input type="submit" value="GoGoGo">
    <h3>Результат</h3>
       <textarea rows=30 cols=160>
    <?
    if (isset($_POST['input'])) {
      $lines=explode ("\r\n",$_POST['input']);

      foreach ($lines as $line) {
        $l=explode('-',$line);
        $from=ip2long($l[0]);
        $to=ip2long($l[1]);
        for ($i=$from;$i<=$to;$i++)
            echo long2ip($i)."\r\n";
       }
    }?>
    </textarea>
    </form>
    </body>
    </html>
    P.S. silmarion, если вдруг есть желание магарыч выставить за помощь - это только приветствуется ;)
     
    silmarion нравится это.
Статус темы:
Закрыта.