Язык RouterOS Script

У системі RouterOS передбачена можливість створення та виконання довільних скриптів мовою RouterOS Scripting, яким відведено спеціальний розділ /system script. Розділ включає три директорії:

  • ./script - директорія для зберігання файлів скриптів
  • ./job - директорія для відображення скриптів, що виконуються в даний момент
  • ./environment - директорія з відображенням змінних оточення

Scripting language manual //help.mikrotik.com

 РОУТЕР MIKROTIK ИГРАЕТ ГИМН УКРАИНЫ //soapbubble.co.ua

Основы

Скрипт RouterOS - это текст, состоящий из командных строк. Командные строки выполняются одна за другой до конца скрипта или до возникновения ошибки выполнения.

Комментарии #

Комментарий использует всю строку, которая начинается с символа #, перед которым не допускается никаких символов, в том числе пробелов и табуляций.

Командная строка

Консоль RouterOS использует следующий синтаксис команды:
[prefix] [path] command [uparam] [param=[value]] .. [param=[value]]

  • [префикс] – символ ":" или "/", указывающий, является ли команда ICE или путем. Это может не потребоваться
  • [путь] - относительный путь к нужному уровню меню. Это может не потребоваться.
  • команда – одна из команд, доступных на указанном уровне меню
  • [uparam] - безымянный параметр, должен быть указан, если команда этого требует
  • [params] - последовательность именованных параметров, за которыми следуют соответствующие значения Конец командной строки представлен токеном ";" или NEWLINE. Иногда ";" или NEWLINE не требуется для завершения командной строки.

Командная строка может использоваться внутри другой командной строки для этого ее помещают в квадратные скобки [ ]

!!!

ограничителями в грамматике служат токены ( ), [ ], { }, :, ;, $, /.
Пробелы используются для разделения токенов. Пробел необходим между двумя токенами только если их объединение может быть интерпретировано, как другой токен.

Использования пробелов следует избегать там, где они не требуются, а в некоторых конструкциях они недопустимы, например перед =.

!!!Команды

Команда начинается символом : или / и заканчивается символом ;. Команда использует строку целиком, а если команда разбита на несколько строк, в конце предшествующей строки используется соединительный символ \.

Многие команды используют параметры, которые следуют за именем команды.

Для каскадного использования команды в параметре другой команды ее обрамляют квадратными скобками [ и ], допускает только одну командную строку.

Области скрипта

По умолчанию скрипт образует глобальную область, в которой могут находится любые команды. Фигурными скобками { и } можно выделять локальные области любой глубины вложенности, которые тоже могут содержать любые команды.

Переменные

Переменная - это именованная область данных, значение которой доступно для команд скрипта. Правила определения имени:

  • IPv4 - могут включать буквы и цифры
  • "br-local" - могут включить знаки и другие символы в двойных кавычках
  • vAR - чувствительны к регистру

Переменные не требуют типизации, но значения переменных могут принадлежать типам:

  • num - 64 битное знаковое целое. может быть инициализировано шестнадцатиричным значением
  • bool - булев тип. может быть true или false
  • str - строковый тип. последовательность символов
  • ip - IP адрес
  • ip6-prefix - IPv6 префикс
  • id - шестнадцатиричное значение с префиксом *. Каждая позиция меню имеет уникальный внутрений ID
  • time - дата и время
  • array - последовательность значений, массив
  • nil - тип переменной по умолчанию, если она не инициализирована никаким значением

Предельно допустимый размер данных переменной 4096 Byte.

Переменные могут быть глобальными и локальными, в зависимости от области декларирования и команды :global или :local. Попытка декларировать глобальную переменную в локальной области приведет к ошибке.

Значение переменной устанавливается командой :set из константы, выражения или значения другой переменной. Команда :set без значения отменяет декларацию переменной и делает ее недоступной.

Команда :put выводит значения переменной в консоль.

///

Ключевые слова

Ключевые слова являются не могут использоваться в качестве имен переменных и функций:

  • and -
  • or -
  • in -

Операторы

Конструкции

Возврат :return

Условие

//

:if(<condition>) do={<commands>} else={<commands>} <expression>

Цикл

//

выполнять команды до тех пор, пока не будет выполнено заданное условие

:do { <commands> } while=( <conditions> );

:while ( <conditions> ) do={ <commands> };

//

:for <var> from=<int> to=<int> step=<int> do={ <commands> }

//

:foreach <var> in=<array> do={ <commands> };

//

Команды

//wiki.mikrotik.com/wiki/Manual:Scripting#Global_commands
//

:log <topic> <message> записывает сообщение в системный журнал log

  • topics тема сообщения из: debug, error, info или warning
  • message текст сообщения допускает ascii и кириллицу, и может быть выражением

:delay <time> приостанавливает выполнение скрипта на заданное время

  • <time> продолжительность остановки в миллисекундах (включает суффикс ms)

:beep <freq> <length> активирует звуковой сигнал из встроенного динамика

  • <freq> частота сигнала в Hz
  • <length> продолжительность сигнала в миллисекундах (включает суффикс ms) не связана с длительностью выполнение самой команды, поэтому последовательность команд :beep должна чередоваться с командами :delay

 

Примеры

Пример управление интерфейсом hide-me-sstp, который отключается на 60 секунд, а затем включается:

 

//

/interface enable hide-me-sstp

Куча

/interface set hide-me-sstp disabled=yes
/ip firewall connection print without-paging
/interface print without-paging
/interface print count-only
:beep frequency=1760 length=100ms;
/interface find type=sstp-out
/interface get number=15

/ip route disable [find dst-address=0.0.0.0/0 gateway=xx.xx.xx.xx]
:log error "ISP2 is down"
:delay 4000 ms
/ip firewall connection remove [find]

!!! MikroTik: Как отключить (включить) интерфейс по расписанию https://mhelp.pro/ru/mikrotik-kak-otklyuchit-vklyuchit-interfeys-po-raspisaniyu/

!!! Авторский: Aleksov's Blog / Софт / RouterOS //blog.set-pro.net

!!! Удалённое включение скриптов Mikrotik из Telegram v 2.0 https://habr.com/ru/post/482802/

!!! Mikrotik Scripts: sending power on notification to Telegram https://mhelp.pro/mikrotik-scripts-sending-power-on-notification-to-telegram/

 

 

Виконання скриптів

Выполнение скриптов возможно двумя способами:

  • в терминале командой /system script run <script>
  • в разделе скриптов System>Scripts скрипты могут создаваться и выполнять вручную или другими скриптами
  • в планировщике System>Scheduler скрипты выполняются по заданному расписанию

Політики /Policy

Для успешного выполнение скрипта действия команд скрипта не должны превышать установленные для скрипта политики Policy. Политики скриптов сходны и частично совпадают с пользовательскими, которые позволяют:

  • ftp
  • reboot выполнить перезагрузку
  • read читать значения настроек
  • write изменять настройки
  • policy управлять учетными записями и группами
  • test запуск инструментов (ping, traceroute, bandwidth-test, wireless scan, snooper)
  • password менять пароль учетной записи
  • sniff исполнение встроенного аналога tcpdump (tools → sniffer)
  • sensitive обрабатывать чувствительные данные, как ключи Wi-Fi, IPSec, SNMP, пароли VPN-интерфейсов и серверов, пароли протоколов маршрутизации, а также создавать архивы, которые содержат чувствительные данные
  • romon
  • dude
Отмена требований политики /dont-require-permissions

Для скрипта в репозитории доступно свойство dont-require-permissions, которого нет у скриптов планировщика. Свойство dont-require-permissions с установленным значением =yes позволяет любому, у кого нет соответствующих разрешений, выполнять скрипт. Например, если в скрипте есть политики read, write, test, sensitive, но у пользователя или приложения, выполняющего сценарий, меньше (например, read, write) то установка dont-require-permissions=yes позволит все равно запустить скрипт. Это потенциально может позволить изменить конфиденциальную информацию с помощью скрипта, даже если у пользователя нет достаточных разрешений.

Терминал

Скрипты и задания планировщика с многострочными скриптами можно создать в окне терминала. Для этого:

  • скрипт заключается в кавычки "..."
  • если в скрипте есть кавычки, их следует маскировать \"
  • отдельные строки скрипта следует разделить \r\n

Пример создание в Scheduler нового задания:

Джерела

Leave a Reply