TGViewer
Про100ИТ Про100ИТ @pro100itru · 1.86K subscribers
Post #776 10
Подборка полезных скриптов для 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 "";
needed file count
:local numQueues [/queue simple print count-only] ;
:local fileCount ($numQueues / $entriesPerFile);
:if ( ($fileCount * $entriesPerFile) != $numQueues) do={
:set fileCount ($fileCount + 1);

old files
/file remove [find name~"stats"];

:put "fileCount=$fileCount";

:for i from=1 to=$fileCount do={
file
/file print file="stats$i.txt";
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;

#network #sysadmin #security

📲 Подписывайся на канал 👉 @PRO100ITru
More from @pro100itru
  1. Oct 3, 2026Post #777
  2. Oct 3, 2026Post #775
  3. Oct 3, 2026📌 WSL 3.0: запуск Linux‑контейнеров в Windows с ядром Linux 6.18 Microsoft выпустила WSL…
  4. Oct 3, 2026Post #772
  5. Oct 3, 2026📌 FreeCAD 1.1.4: исправления уязвимостей и багов В конце сентября 2026 года вышел FreeCAD…
  6. Oct 3, 2026Post #770
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 →