Системный Администратор | Sysadmin Windows & Linux Server. Настройка Сети, ПК и Железа. IT Уроки для Сисадмина: Безопасность, Софт и Техподдержка (Helpdesk). Компьютерная помощь.
IT и технологии · 2 октября 2026 г.
Подборка полезных скриптов для Mikrotik
Подборка полезных скриптов для Mikrotik Создание файла невозможно создать файл напрямую, однако есть обходной путь: /file print file=myFile /file set myFile.txt contents="" Проверка, изменился ли IP на интерфейсе Иногда провайдер выдает динамические IP-адреса. Этот скрипт проверит, изменился ли динамический IP-адрес. :global currentIP; :local newIP [/ip address get [find interface="ether1"] address]; :if ($newIP != $currentIP) do={ :put "ip address $currentIP changed to $newIP"; :set currentIP $newIP; } Удаляем сетевую маску Этот скрипт полезен, если вам нужен IP-адрес без сетевой маски (например, для использования в брандмауэре), но команда "/ip address get [id] address" возвращает IP-адрес вместе с маской. :global ipaddress 10.1.101.1/24 :for i from=( [:len $ipaddress] - 1) to=0 do={ :if ( [:pick $ipaddress $i] = "/") do={ :put [:pick $ipaddress 0 $i] } } Еще один, гораздо более простой способ: :global ipaddress 10.1.101.1/24 :put [:pick $ipaddress 0 [:find $ipaddress "/"]] Определяем имя хоста Многие пользователи просят добавить возможность использовать DNS-имена вместо IP-адресов для RADIUS-серверов, правил брандмауэра и т.д. Вот пример того, как определить IP-адрес RADIUS-сервера. Предположим, что у нас настроен RADIUS-сервер: /radius add address=3.4.5.6 comment=myRad А вот скрипт, который определит IP-адрес, сравнит полученный IP с настроенным и заменит его, если они не совпадают: /system script add name="resolver" source= { :local resolvedIP [:resolve "server.example.com"]; :local radiusID [/radius find comment="myRad"]; :local currentIP [/radius get $radiusID address]; :if ($resolvedIP != $currentIP) do={ /radius set $radiusID address=$resolvedIP; /log info "radius ip updated"; } } Добавьте этот скрипт в планировщик, чтобы он выполнялся, например, каждые 5 минут. /system scheduler add name=resolveRadiusIP on-event="resolver" interval=5m Записать статистику очереди в несколько файлов Рассмотрим, что названия очередей выглядят как "some text.1", чтобы мы могли искать очереди по последнему числу сразу после точки. :local entriesPerFile 10; :local currentQueue 0; :local queuesInFile 0; :local fileContent ""; #determine needed file count :local numQueues [/queue simple print count-only] ; :local fileCount ($numQueues / $entriesPerFile); :if ( ($fileCount * $entriesPerFile) != $numQueues) do={ :set fileCount ($fileCount + 1); } #remove old files /file remove [find name~"stats"]; :put "fileCount=$fileCount"; :for i from=1 to=$fileCount do={ #create file /file print file="stats$i.txt"; #clear content /file set [find name="stats$i.txt"] contents=""; :while ($queuesInFile < $entriesPerFile) do={ :if ($currentQueue < $numQueues) do={ :set currentQueue ($currentQueue +1); :put $currentQueue ; /queue simple :local internalID [find name~"\\.$currentQueue\$"]; :put "internalID=$internalID"; :set fileContent ($fileContent . [get $internalID target-address] . \ " " . [get $internalID total-bytes] . "\r\n"); } :set queuesInFile ($queuesInFile +1); } /file set "stats$i.txt" contents=$fileContent; :set fileContent ""; :set queuesInFile 0; } 👉 @i_odmin