Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Скрипт для конвертации IP в адресный список

    Скрипт для конвертации IP в адресный список

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт для конвертации IP в адресный список, RouterOS
     
    nbctcp
    Guest
    #1
    0
    03.03.2016 11:49:00
    Привет! Допустим, у меня есть 7000 IP из этого текста http://torstatus.blutmagie.de/ip_list_all.php/Tor_ip_list_ALL.csv. Я хочу конвертировать все эти IP в список адресов с помощью скрипта, что-то вроде такого: do {/ip firewall address-list add address=$entry list=list-TOR}. Я использую этот метод, но скрипт не может создать список адресов MY-IP-LIST http://wiki.mikrotik.com/wiki/Using_Fetch_and_Scripting_to_add_IP_Address_Lists. Есть ли у кого рабочий скрипт для RouterOS 6.34.2? Спасибо!
     
     
     
    pe1chl
    Guest
    #2
    0
    07.04.2021 08:04:00
    Думаю, я бы добавил адреса в список с очень большим таймаутом, чтобы они не записывались во флеш.
     
     
     
    jo2jo
    Guest
    #3
    0
    30.11.2019 23:15:00
    привет, да, этот скрипт с вики устарел и не работает на 6.x, но если немного изменить цикл do / while, он будет работать (перенести :while вверх), сделай так: :while ($lineEnd < $contentLen) do={
                :set lineEnd [:find $content "\n" $lastEnd];
                :set line [:pick $content $lastEnd $lineEnd];
                :set lastEnd ($lineEnd + 1);
          #Если строка не начинается с решётки, тогда обрабатываем и добавляем в список
                :if ([:pick $line 0 1] != "#") do={
          :local entry [:pick $line 0 $lineEnd];
              :if ([:len $entry] > 0) do={
                  /ip firewall address-list add list="MY-IP-LIST"
               }
             }
          }
          }
     
     
     
    jvanhambelgium
    Guest
    #4
    0
    06.04.2021 14:51:00
    Кто-нибудь может помочь понять, почему это не работает? В общем, я объединил несколько команд, чтобы сделать скрипт, который должен работать, но он просто очищает/удаляет весь список адресов “DNS”. Я скачал по ссылке ниже набор публичных DOH/DOT серверов, которые хочу преобразовать в ACL.  
    https://github.com/oneoffdallas/dohservers/blob/master/iplist.txt  

    Взял скрипт из WIKI (который не работал на RouterOS 6.x) и добавил исправление, предложенное в этом посте, чтобы он снова работал. Но список по-прежнему пустой.  
    В файле iplist.txt есть строки, начинающиеся с #, их нужно игнорировать. Там также есть пустые строки, интересно, нормально ли это. Ниже небольшой фрагмент списка.  

    Список IP серверов DNS over HTTPS (DoH)  
    Это список IP, соответствующих публичным DoH-провайдерам. Его можно использовать для блокировки этих IP через фаервол.  
    Список был сгенерирован командой dig +short HOSTNAME A  

    Twitter: @oneoffdallas  
    Домашняя страница: https://github.com/oneoffdallas/dohservers  
    Исходные данные: https://raw.githubusercontent.com/oneoffdallas/dohservers/master/iplist.txt  
    Добавлено: 14 октября 2019  
    Последнее обновление: 5 апреля 2021  

    Опционально включены основные адреса Cloudflare (включая Google и Quad9 ниже)  
    1.1.1.1  
    1.0.0.1 security.cloudflare-dns.com — IP ниже в списке  
    1.1.1.2  
    1.0.0.2 family.cloudflare-dns.com  
    1.1.1.3  
    1.0.0.3 dns.cloudflare.com (опционально, так как cdnjs.cloudflare.com использует те же IP)  
    104.16.132.229  
    104.16.133.229  

    ПРИМЕЧАНИЯ  
    Quad9 также использует порт 5053 для DoH (по состоянию на 11 января 2020)  
    https://www.quad9.net/doh-quad9-dns-servers/#UsingDoHwithQuad9DNSServers-AdditionalInformation  

    dnscrypt.ca использует порт 453 для DoH (вместо 443)  
    168.235.81.167  
    176.56.236.175  
    176.103.130.131  
    176.103.130.130  
    176.103.130.132  
    176.103.130.134  
    37.252.185.229  
    206.189.215.75  

    Сам скрипт:  

    Generic IP address list input  
    Основан на скрипте Сам Норриса, ChangeIP.com 2008  
    Редактировал Эндрю Кокс, AccessPlus.com.au 2008  

    :if ( [/file get [/file find name=iplist.txt] size] > 0 ) do={
     Удаляем существующие адреса из текущего списка адресов  
     /ip firewall address-list remove [/ip firewall address-list find list=DNS]
     :global content [/file get [/file find name=iplist.txt] contents];
     :global contentLen [:len $content];
     :global lineEnd 0;  
     :global line "";  
     :global lastEnd 0;  
     :while ($lineEnd < $contentLen) do={  
       :set lineEnd [:find $content "\n" $lastEnd];
       :set line [:pick $content $lastEnd $lineEnd];
       :set lastEnd ($lineEnd + 1);  
       # Если строка не начинается с #, обрабатываем и добавляем в список  
       :if ([:pick $line 0 1] != "#") do={
         :local entry [:pick $line 0 $lineEnd];
         :if ([:len $entry] > 0) do={
           /ip firewall address-list add list="DNS"  
         }  
       }  
     }  
    }
     
     
     
    msatter
    Guest
    #5
    0
    06.04.2021 15:15:00
    Пока файл меньше 64КБ, можно использовать скрипт, написанный Shumkov: http://forum.mikrotik.com/t/address-lists-downloader-dshield-spamhaus-drop-edrop-etc/133640/5
     
     
     
    jvanhambelgium
    Guest
    #6
    0
    06.04.2021 16:13:00
    Список всего 5 Кб, но скрипт не работает, просто выбрасывает ошибку в лог, как и запрограммировано. Если посмотреть на оригинальный скрипт, то “список”, который больше всего похож на тот, что я пытаюсь импортировать, это тот, что ниже:

    $update
    url= https://sslbl.abuse.ch/blacklist/sslipblacklist.txt
    description=“Abuse.ch SSLBL”
    delimiter=(“\r”)
    ################################################################
    abuse.ch SSLBL Botnet C2 IP Blacklist (только IP)
    Последнее обновление: 2021-04-04 15:14:45 UTC
    Условия использования: https://sslbl.abuse.ch/blacklist/
    Если есть вопросы, пишите на sslbl [at] abuse.ch
    ################################################################
    DstIP
    45.141.37.7
    193.233.78.102
    79.134.225.23
    91.200.41.42
    140.82.57.172
    23.95.0.100
    92.223.90.242
    193.142.58.181
    141.164.36.203
    207.32.219.41
    45.144.225.107
    88.80.186.210
    3.138.180.119
    45.129.137.247
    46.243.221.41
    18.224.135.48
    45.77.122.108
    23.105.131.172

    URL, который я использую, тоже содержит несколько пустых строк, но я думал, что скрипт (судя по регулярному выражению) реально ищет только IP в точечной записи и игнорирует всё остальное, включая символы “#” и так далее.

    И перед запуском скрипта у меня есть список с именем “DNS”, и он его не удаляет, даже если я немного меняю скрипт, например:

    ip firewall address-list
    :local update do={
      :do {
         :local data ([:tool fetch url=$url output=user as-value]->“data”)
         remove [find list=DNS]
      }

    Я ожидал, что список “DNS” просто удалится, но он остаётся.
     
     
     
    pe1chl
    Guest
    #7
    0
    06.04.2021 18:25:00
    Конечно, для этой конкретной задачи можно также сделать список адресов на основе DNS. Либо использовать DNS-имена из этого списка, либо создать собственный домен и загрузить в него нужные адреса под именем вроде doh-servers.example.com.
     
     
     
    msatter
    Guest
    #8
    0
    06.04.2021 22:43:00
    Я протестировал это с этой версией, и всё работает. Запусти в терминале и посмотри, работает ли. Если в скрипте не работает — нужно задать права (ftp, read, write, policy, test, password). Может быть, прав многовато, но у меня работает. # Написано Shumkov # Адаптировано blacklister # 20201025  
    {  
    /ip firewall address-list  
    :local update do={  
    :do {  
    :local result [/tool fetch url=$url as-value output=user];
    :if ($result->"downloaded" != "63") do={  
    :local data ($result->"data")  
     :do { remove [find list=$blacklist] } on-error={}
      :while ([:len $data]!=0) do={
         :if ([:pick $data 0 [:find $data "\n"]]~"^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}") do={
         :do {add list=$blacklist address=([:pick $data 0 [:find $data $delimiter]].$cidr) } on-error={}
        }  
      :set data [:pick $data ([:find $data "\n"]+1) [:len $data]]
      } ;  
      :log warning "Импортирован список адресов <$blacklist> из файла: $url"  
      } else={:log warning "Список адресов: <$blacklist>, скачанный файл слишком большой: $url" }  
    } on-error={:log warning "Обновление списка адресов <$blacklist> не удалось"}  
    }  
    $update url=https://raw.githubusercontent.com/oneoffdallas/dohservers/master/iplist.txt blacklist="RougeDNS" delimiter=("\n")  
    }  

    Это действительно отличный и очень надёжный кусок кода, поэтому предполагалось, что он подошёт и для этого — и да, подходит. Пока файлы не превышают 63 КБ, это именно тот код, который нужно использовать. Он принимает только IP-адреса, начинающиеся с начала строки (RegEx): "^[0-9]
     
     
     
    jvanhambelgium
    Guest
    #9
    0
    07.04.2021 08:02:00
    Привет! Скопировал и вставил — и теперь действительно работает! Я выставил права ровно так, как ты и говорил в примере. Странно, но я рад, что теперь всё нормально, потому что уже готов был рвать на себе последние волосы! Спасибо!
     
     
     
    jvanhambelgium
    Guest
    #10
    0
    07.04.2021 08:28:00
    Этот список, наверное, не такой уж «динамичный» по сравнению с другими. Так что одно обновление в день (или даже в неделю) будет нормально. В любом случае, я собираюсь проверить, есть ли какие-то срабатывания счётчиков.
     
     
     
    msatter
    Guest
    #11
    0
    07.04.2021 12:04:00
    Дело в том, что они не сохраняются во флеш-памяти, поэтому и не попадают в какие-либо резервные копии. Версия на моём роутере, которая была неактивна, использовала foreach вместо while, и из-за этого у меня появились лишние седые волосы, пока я не понял в чём дело. Как-то это застряло в моей мозговой памяти — array–>foreach. Здесь же в массиве используется только одно поле, так что foreach — это всего лишь один цикл.
     
     
     
    msatter
    Guest
    #12
    0
    07.04.2021 13:27:00
    Вот ещё одна версия, которая берёт комментарии из файла и ставит их за соответствующими IP-адресами… Ой, на английском. Ниже версия, которая также забирает комментарии из файла и вставляет их в список адресов как комментарии.

    # Written by Shumkov  
    # Adapted by blacklister  
    # 20210407

    {  
    /ip firewall address-list  
    :local update do={  
    :do {  
    :local result [/tool fetch url=$url as-value output=user]; :if ($result->"downloaded" != "63") do={ :local data ($result->"data")
     :do { remove [find list=$blacklist] } on-error={}

      :while ([:len $data]!=0) do={
         :if ([:pick $data 0 1] = "#") do={ :set $Comment [:pick $data 2 [:find $data "\n"]] }
         :if ([:pick $data 0 [:find $data "\n"]]~"^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}") do={
         :do {add list=$blacklist comment=$Comment address=([:pick $data 0 [:find $data $delimiter]].$cidr)} on-error={}
        }  
      :set data [:pick $data ([:find $data "\n"]+1) [:len $data]]
      } ;  :log warning "Imported address list < $blacklist> from file: $url"  
      } else={:log warning "Address list: <$blacklist>, downloaded file too big: $url" }  
    } on-error={:log warning "Address list <$blacklist> update failed"}  
    }  
    $update url=https://raw.githubusercontent.com/oneoffdallas/dohservers/master/iplist.txt blacklist="RougeDNS" delimiter=("\n")  
    }
     
     
     
    pe1chl
    Guest
    #13
    0
    07.04.2021 13:34:00
    К сожалению, RouterOS не поддерживает счётчики для каждой записи в списке адресов. Обычный Linux это умеет, по крайней мере в текущей версии (первая версия «ipset» этого не поддерживала). Было бы здорово, если бы в списках адресов RouterOS появились такие счётчики — тогда можно было бы видеть, насколько активны отдельные записи. Сейчас же можно считать только по правилу фаервола, то есть для всех элементов списка вместе.
     
     
     
    tramil
    Guest
    #14
    0
    18.10.2022 08:36:00
    Я начал использовать этот скрипт, но не понимаю вот эту часть: :do {add list=$blacklist address=([:pick $data 0 [:find $data $delimiter]].$cidr) Откуда взялся $cidr?
     
     
     
    rextended
    Guest
    #15
    0
    18.10.2022 08:41:00
    Если вы передадите параметр cidr в эту функцию, он будет использован.
     
     
     
    tramil
    Guest
    #16
    0
    18.10.2022 09:12:00
    Окей, понял. Это необязательный аргумент, в приведённом примере не используется. Спасибо.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры