TGViewer
Системный администратор Системный администратор @i_odmin · 26.7K subscribers
Post #11001 1.17K
Подборка полезных скриптов для 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;

}





📲 Мы в MAX

👉 @i_odmin
  • 👍 8
  • ❤ 2
  • 🔥 1
More from @i_odmin
  1. Oct 1, 2026Защита контейнеров без тормозов для релизов 🐳 Как встроить проверки безопасности в работу…
  2. Oct 1, 2026Шпаргалка по сетевой безопасности 📲 Мы в MAX 👉 @i_odmin
  3. Oct 1, 2026Совет 💡 Как остановить выполнение скрипта в bash при возникновении ошибки в команде? Кома…
  4. Sep 30, 2026Шпаргалка по PowerShell Основные команды - Get-Help <команда> – получить справку по команд…
  5. Sep 29, 2026Kagent + Ollama: ИИ-агент для работы с Kubernetes Как использовать локальную языковую моде…
  6. Sep 29, 2026Сброс сетевых настроек из командной строки Windows Сбросьте кэш DNS ipconfig /flushdns Сбр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →