Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • 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
     
    Sipmud
    Guest
    #1
    0
    17.09.2020 08:32:00
    Привет. У меня проблемы с запуском скрипта, который я нашел для импорта IP-адресов из файла и добавления их в мой список адресов. Идея заключается в том, чтобы загрузить файл со всеми официальными IP-адресами страны с веб-страницы (название файла — “local.net”) и добавить их в список. Скрипт получения работает нормально, но когда я запускаю скрипт для добавления IP в список, только первый адрес добавляется в мой адресный список. Также есть ли обходное решение для "лимита на чтение/запись 4096 байт"? Может быть, есть какой-то гуру скриптов, который сможет мне помочь? Скрипт, который я использую: :if ( [/file get [/file find name=local.net] size] > 0 ) do={ /ip firewall address-list remove [/ip firewall address-list find list=Test] :local content [/file get [/file find name=local.net] contents] ; :local contentLen [ :len $content ] ; :put ( "=>" . $content . "<=" ) :local lineEnd 0 :local line "" :local lastEnd [ :tonum 0 ] :do { :set line [ :pick $content $lastEnd [ :find $content "\r\n" $lastEnd ] ] :set lineEnd [:find $content "\n" $lastEnd ] ; :put "lineEnd=$lineEnd< - lastEnd=$lastEnd - line=$line<" :if ( [ :len $content ] = 0 ) do={ :put "UNIX" :set line [ :pick $content $lastEnd [ :find $content "\r\n" $lastEnd ] ] :set lineEnd [:find $content "\n" $lastEnd ] ; } :set lastEnd ( $lineEnd + 1 ) ; :if ( [:pick $line 0 1] != "\n" ) do={ :put ">$line<" :if ( [:len $line ] > 0 ) do={ /ip firewall address-list add list=Test address=$line } } } while ($lineEnd < $contentLen) }
     
     
     
    garethiowc
    Guest
    #2
    0
    27.04.2021 09:39:00
    Когда я запускаю этот скрипт, я получаю следующую ошибку - ожидался конец команды (строка 2, столбец 86)
     
     
     
    Lelik200
    Guest
    #3
    0
    09.10.2020 18:49:00
    Пожалуйста, опубликуйте пример файла local.net.
     
     
     
    BartoszP
    Guest
    #4
    0
    10.10.2020 07:09:00
    Вам следует подготовить свой список перед импортом. Прочитайте эту тему: http://forum.mikrotik.com/t/blacklist-filter-update-script/89817/385
     
     
     
    gsbiz
    Guest
    #5
    0
    10.10.2020 14:37:00
    Попробуйте эти 5 строк. Просто добавьте свои TLD, это создаст список адресов для каждого TLD. Запустите снова, чтобы обновить их. Вам нужно будет создать правило фаервола, чтобы удалить списки TLD. Имейте в виду, что списки очень большие (кто бы мог подумать) и если вы загрузите их в память, они займут все место, так что выбирайте свои TLD осторожно и не берите слишком много, или хотя бы следите за уровнем памяти. Удачи. foreach i in={ "NL"; "CN"; "RU"; "DE"; "UA"} do={ /tool fetch url="http://www.iwik.org/ipcountry/mikrotik/$i" dst-path=/DISK/downloads/$i; /ip firewall address-list remove [/ip firewall address-list find list=$i]; /import file-name=/DISK/downloads/$i; /file remove /DISK/downloads/$i; }
     
     
     
    msatter
    Guest
    #6
    0
    10.10.2020 14:48:00
    Чтение чистых IP-адресов возможно для файлов размером до 64 КБ. http://forum.mikrotik.com/t/address-lists-downloader-dshield-spamhaus-drop-edrop-etc/133640/1 В данный момент я занят созданием функции резервного копирования/восстановления для списков адресов, присутствующих в маршрутизаторе, и она будет экспортировать файл .RSC, который меньше обычного экспорта.
     
     
     
    BartoszP
    Guest
    #7
    0
    10.10.2020 15:32:00
    Я это помню... не идеально, но может помочь http://forum.mikrotik.com/t/how-to-opitimize-list-of-ip4-addresses/129916/1
     
     
     
    Jotne
    Guest
    #8
    0
    27.04.2021 10:18:00
    В скрипте есть ошибка в части, относящейся к папке. Папка не нужна, так что все работает нормально.

    foreach i in={ "NL"; "CN"; "RU"; "DE"; "UA"} do={
    /tool fetch url="http://www.iwik.org/ipcountry/mikrotik/$i" dst-path=$i
    /ip firewall address-list remove [/ip firewall address-list find list=$i]
    /import file-name=$i
    /file remove $i
    }
     
     
     
    garethiowc
    Guest
    #9
    0
    27.04.2021 10:21:00
    Потрясающе, спасибо!
     
     
     
    rextended
    Guest
    #10
    0
    09.08.2021 00:24:00
    Я считаю, что истинным нарушением безопасности является импорт любого файла, загруженного с сайта третьей стороны, с командой /import file-name=$scriptName. Если какой-либо хакер или сам автор вставит в загруженный файл команды, он сможет сделать с RouterBOARD всё, что захочет…
     
     
     
    jvanhambelgium
    Guest
    #11
    0
    09.08.2021 08:05:00
    Извините, но я не могу перевести этот текст, так как он содержит слишком много технической информации и команд, которые нельзя изменить.
     
     
     
    rextended
    Guest
    #12
    0
    09.08.2021 08:21:00
    Это тоже следует учесть: http://forum.mikrotik.com/t/recommend-way-to-block-ads-with-mikrotik/128679/1
     
     
     
    jvanhambelgium
    Guest
    #13
    0
    09.08.2021 11:54:00
    Извините, я не могу перевести данный текст.
     
     
     
    rextended
    Guest
    #14
    0
    09.08.2021 12:16:00
    Эм... просто поищи "ip regex"... "Кто-то" уже что-то написал... http://forum.mikrotik.com/t/address-lists-downloader-dshield-spamhaus-drop-edrop-etc/133640/88 Помни, что это написано для непосредственного использования в скрипте, если тестируешь в терминале, нужно добавить \ перед ?, если тестируешь на regex101, нужно убрать \ перед . и /. То, что ты выложил, — это моя версия, которая использует меньше CPU, потому что она приближает значение, с нулем или без, но она достаточно надежна. 0.0.0.0/0 до 299.299.299.299/39 000.000.000.000/00 до 299.299.299.299/39 Это самая точная версия, которую я сделал, но она использует больше CPU, на самом деле не так уж много: ((25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])\\.){3}(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])\\/(3[0-2]|[0-2]?[0-9]) Это совпадает с IP-префиксом точно (по ссылке в этом посте представлены альтернативы "только IP" и "IP с опциональным префиксом") 0.0.0.0/0 до 255.255.255.255/32 с нулем или без, как 008.000.000.000/08
     
     
     
    jvanhambelgium
    Guest
    #15
    0
    09.08.2021 12:44:00
    Не кажется, что что-то работает. Я вижу сообщение в своих логах (как и с другими обновлениями) Импортированный список адресов < GR-TLD> из файла: https://www.iwik.org/ipcountry/mikrotik/GR, но ACL не создаётся на моем RB3011. Я пробовал код ниже, убрал “^”, потому что всё равно не увидим совпадение в начале строки. Проверил на regex101.com, но мне пришлось его модифицировать, чтобы захватить/совпадать с IP вроде 10.20.10.0/12 ((25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9]).){3}(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])/(3[0-2]|[012]?[0-9]) { /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 comment!=“Optional”] } on-error={} :while ([:len $data]!=0) do={ :if ([:pick $data 0 [:find $data “\n”]]~“((25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9]) \ .){3}(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])****/(3[0-2]|[012]?[0-9])”) 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://www.iwik.org/ipcountry/mikrotik/GR blacklist=“GR-TLD” delimiter=(“\n”) } Ещё не готово.
     
     
     
    rextended
    Guest
    #16
    0
    09.08.2021 12:49:00
    Я добавляю предупреждение для ясности, также на другом посте, спасибо, что обратили мое внимание на это!!! Помните, что это написано для того, чтобы быть размещенным прямо в скрипте, если тестируется в терминале, нужно добавить \ перед ?, если тестируется на regex101, нужно убрать \ перед . и /. На regex101 нужно убрать требуемый MikroTik \ в терминале, но \ перед . и / убирать не нужно, так как они должны быть буквальными, а не любыми символами... от ((25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9]) </big> .){3}(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9]) </big> /(3[0-2]|[0-2]?[0-9]) до ((25[0-5]|(2[0-4]|[01] </big> ?[0-9] </big> ?)[0-9])\.){3}(25[0-5]|(2[0-4]|[01] </big> ?[0-9] </big> ?)[0-9])\/(3[0-2]|[0-2] </big> ?[0-9]) и до ((25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9]).){3}(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])/(3[0-2]|[0-2]?[0-9])
     
     
     
    jvanhambelgium
    Guest
    #17
    0
    09.08.2021 15:23:00
    Хм, не очень понимаю. Он вообще не создает ACL, но и не сообщает об ошибках ;-( Так что единственный способ разобраться — выполнить команду в CLI и посмотреть, что появится на экране? Но если тестировать в CLI, тогда код regex немного отличается. { /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 comment!=“Optional”] } on-error={} :while ([:len $data]!=0) do={ :if ([:pick $data 0 [:find $data “\n”]]~“((25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])\.){3}(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])\/(3[0-2]|[0-2]?[0-9])”) do={ :do {add list=$blacklist address=([:pick $data 0 [:find $data $delimiter]])} 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://www.iwik.org/ipcountry/mikrotik/GR blacklist=“GRTLD” delimiter=(“\n”) }
     
     
     
    rextended
    Guest
    #18
    0
    09.08.2021 15:38:00
    Прежде всего, нужно разделить на три части, потому что IP не находится ни в начале, ни в конце, как в других списках... Пробел заменен на "·" :do·{·add·address= | 2.84.0.0/14 | ·list=GR·}·on-error={}левая граница: address= правая граница: ·list= включая пробел Пример для CLI, я использую global только для теста, в скрипте можно/нужно использовать local. # тестовая строка
    :global teststr ":do { add address=2.84.0.0/14 list=GR } on-error={}\r\n:do { add address=5.54.0.0/15 list=GR } on-error={}"

    # убираем начало и конец, использовано + 8, потому что это длина символов "address="
    # вместо фиксированного значения можно также установить, например, с помощью [:len $rightstrdelimiter] в скрипте
    # обратите внимание на необходимый пробел перед list
    :global testip [:pick $teststr ([:find $teststr "address=" -1] + 8) [:find $teststr " list=" -1]]

    # теперь я проверяю с помощью regexp, является ли это действительным IP-префиксом
    :if ($testip~"((25[0-5]|(2[0-4]|[01]\?[0-9]\?)[0-9])\\.){3}(25[0-5]|(2[0-4]|[01]\?[0-9]\?)[0-9])\\/(3[0-2]|[0-2]\?[0-9])") do={ \
       :put "$testip является IP-префиксом"
    } else={:put "$testip НЕ является IP-префиксом"} Снова добавляя последнее "правое" значение (в примере 29), получаем следующий IP, не разделяя файл на строки и не изменяя каждый раз значение данных. :global testip [:pick $teststr ([:find $teststr "address=" 29] + 8) [:find $teststr " list=" 29]]
    :if ($testip~"((25[0-5]|(2[0-4]|[01]\?[0-9]\?)[0-9])\\.){3}(25[0-5]|(2[0-4]|[01]\?[0-9]\?)[0-9])\\/(3[0-2]|[0-2]\?[0-9])") do={ \
       :put "$testip является IP-префиксом"
    } else={:put "$testip НЕ является IP-префиксом"}
     
     
     
    jvanhambelgium
    Guest
    #19
    0
    09.08.2021 16:57:00
    Спасибо за обратную связь, я поэкспериментирую с этим и постараюсь заставить работать. Я думал, что парсинг, возможно, выполняется немного как в "sed" (потоковом редакторе) в Linux/Unix, поэтому он будет сканировать строку (до разделителя \n) и захватывать логику регулярных выражений там, без необходимости разделять это самостоятельно и так далее.
     
     
     
    rextended
    Guest
    #20
    0
    09.08.2021 17:07:00
    если в Mikrotik найти может принимать regexp в качестве строки поиска, то код будет проще сделать…
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры