Четверг
21.09.2017, 20:46
Приветствую Вас Гость | RSS
Главная Каталог статей Регистрация Вход
Меню сайта

Категории раздела
Разное [15]
Документация [18]
Авторские статьи [45]

Поиск

Свежие статьи
Динамическое деление скоро...
port knocking на mikrotik
Установка NGINX без прав R...
Как настроить время (NTP S...
Настраеваем CROND
Биллинг MikBill на UBUNTU
Даунгрейд PHP до версии 5....
Устанавливаем в Ubuntu 10....
Как настроить MySQL
Как настроить ZendOptimize...

Форма входа
Логин:
Пароль:

Главная » Статьи » Документация

Серверные сценарии ч.1
Серверные сценарии ч.1
Спецификация
Требуемые пакеты:system
Требуемый уровень лицензии:Level1
Уровень подменю:/system script
Стандарты и технологии: Нет
Использование аппаратных средств: Не существенно
Сопровождающие документы
Управление пакетами
Синтаксис Команд Консоли
Описание
Консольные команды делятся на следующие части:
prefix - дополнительные опции которые указывают является ли это командой ICE;
как :put или как :path стартующий из корня меню как например /ping 10.0.0.1
path - относительный путь к желаемому меню
path_args - эта часть требуется для выбора некоторого уровня меню, где
фактический путь может пересекаться с различным пользовательским вводом,
например как /ip firewall rule < name >
action - одно из действий доступное в указанном уровне меню.
action_args - некоторым действиям требуется аргумент который должен находится
после определения имени действия, как например /ping < ip address > .
params[=values] - последовательность названий параметров сопрово ждаемых
соответствующими значениями.
Примечание
Замена переменных, замена команды и выражений разрешены только для path_args и
action_args. Для prefix, path, action и params значения передаются только как слово. Так
например :put (1 + 2) правильно, а ":pu" . "t") 3 нет.
Примеры
Части внутренних консольных команд будут рассмотрены в следующих примерах:
/ping 10.0.0.1 count=5
prefix /
action ping
action_args 10.0.0.1
params[=values] count=5
..ip firewall rule input
path
..ip firewall rule
path_args input
:for i from=1 to=10 do={:put $i}
prefix :
action for
action_args i
params[=values] from=1 to=10 do={:put $i}
/interface monitor-traffic ether1,ether2,ipip1
prefix /
path interface
action monitor-traffic
action_args ether1,ether2,ipip1
Группировка выражений
Описание
Эта особенность обеспечивает простой способ исполнения команд в пределах одного
командного уровня, путем помещения их в фигурные скобки '{}' или квадратные скобки
'[]'. Квадратные скобки могут быть использованы только в одиночной строке для
автозавершения путем двойного нажатия [Tab].
Примечание
Вы не должны изменять текущий уровень команды в сценариях, печатая только, этот -
путь, без любой команды, также как при работе с консолью в интерактивном режиме.
Также изменения не будут иметь эффекта в сценарии.
Рассмотрим следующий пример:
admin@MikroTik] ip address> /user {
{... /ip route
{... print
{... }
Flags: X - disabled
0 ;;; system default user
name="admin" group=full address=0.0.0.0/0
1 name="x" group=write address=0.0.0.0/0
2 name="y" group=read address=0.0.0.0/0
[admin@MikroTik] ip route>
Хотя текущий уровень команд изменен на /ip route это будет иметь эффект только после
следующей команды, то есть команда print будет исполнена как /user print.
Переменные
Описание
Консоль позволяет вам создавать и использовать глобальные(используемые везде) и
локальные(используемые в конкретном сценарии) переменные. К переменным можно
обратиться по имени '$'. Имена переменных могут содержать символы цифры и знак ' -'.
Переменная должна быть объявлена до использования в сценарии. Доступно три варианта
объявления переменных.
global определен для действия global, глобальные переменные могут быть
доступны в любых сценариях
или в консоли после авторизации на том же самом маршрутизаторе. Переменные
не сохраняются после перезагрузки.
local определен для действия local, локальные переменные не доступны в других
сценариях. Эти переменные теряются после окончания работы сценария.
loop index variables определено в пределах утверждений for и foreach, эти
переменные используются только в блоке команд do и удаляются после окончания
цикла.
monitor action некоторые команды мониторинга тоже могут изменять переменные
в пределах do.
Вы можете присвоить новое значение переменной при помощи действия action.
Это действие использует два аргумента : имя переменной и новое значение переменной.
После того как надобность в переменной отпала ее имя можно высвободить командой :
unset.
Если вы высвобождаете локальную переменную ее значение будет утеряно. Е сли вы
высвобождаете глобальную переменную ее значение не уничтожается, оно только
становится не доступным в текущем сценарии.
Замечание
Учтите что "скрытые" циклические пе ременные уже используются локальными
переменными по их именам (тем же самым).
Пример
[admin@MikroTik] ip route> /
[admin@MikroTik] > :global g1
[admin@MikroTik] > :set g1 "this is global variable"
[admin@MikroTik] > :put $g1
this is global variable
[admin@MikroTik] >
Команда замены и возвращение значений
Описание
Некоторые консольные команды чаще всего используются если их вывод можно
использовать в других командах. В консоли это реализовано путем "возвращения"
значения из команды. Возв ращение значения не отображается на экране. Когда вы
набираете команду внутри квадратных скобок '[' ']', то эта команда исполняется и
возвращаемое значение используется как значение внутри этих скобок. Это называется
командой замены. Команды возвращающие з начение, но не ограниченные: find, /ping -
возвращает количество удачных "пингов", time - возвращает форматированное значение
времени, incr и decr возвращают новое значение переменной, add - возвращает
внутреннее число недавно
созданного элемента.
Пример
Рассмотрим использование команды find
[admin@MikroTik] > /interface
[admin@MikroTik] interface> find type=ether
[admin@MikroTik] interface>
[admin@MikroTik] interface> :put [find type=ether]
*1,*2
[admin@MikroTik] interface>
Таким способом вы можете просмотреть значения недавно созданных переменных.
Естественно вы можете использовать их в других командах.
Например
[admin@MikroTik] interface> enable [find type=ether]
[admin@MikroTik] interface>
Операторы
Описание
Консоль может выполнять простые вычисления с числами, временными значения, ip
адресами,
строками и списками. Это достигается путем написания выражений и помещением их в
круглые скобки '('and')'.
Результат выражения служит возвращаемым значением для круглых скобок.
Описание команд
- - унарный минус. Инвертирует взятое числовое значение.
- - бинарный минус. Вычитает два числа, два временных значения, два ip адреса или ip
адрес и число.
! - логический NOT. Унарный оператор инвертирует взятое булевое значение переменной.
/ - деление. Бинарный оператор. Делит одно взятое число на другое или временное
значение на число.
. - конкатенация. Бинарный оператор объединяет две строки или добавляет один список к
другому или добавляет элемент в список.
^ - побитовый XOR. Аргументы два ip адреса.
~ - побитовая инверсия. Унарный оператор инвертирует биты в ip адресе.
* - умножение. Бинарный оператор который может перемножит два числа или число и
временное значение.
& - побитовый AND. Аргументы два ip адреса.
&& - логический AND. Аргументы две логические переменные.
+ - бинарный плюс. Складывает два числа, два временных значения или число и ip адрес.
< - меньше. Бинарный оператор, сравнивающий два числа, два временных значения или
два ip адреса. Возвращает булевое значение.
<< - левый сдвиг. Бинарный оператор, который сдвигает ip адрес на заданное количество
битов. Первый аргумент ip адрес, второй целое число, а результат ip адрес.
<= - меньше или равно. Бинарный оператор сравнивает два числа, два временных
значения или два ip адреса. Возвращает булевое значение.
>> - правый сдвиг. Бинарный оператор, который сдвигает ip адрес на заданное количество
битов. Первый аргумент ip адрес, второй целое число, а результат ip адрес.
| - побитовый OR. Аргументы два ip адреса.
|| - логический OR. Аргументы две логические переменные.
Примечание
Когда сравниваются два массива. Эти массивы равны если равны соответствующие
переменные.
Примеры
Приоритетность операций и оценка вычислений.
[admin@MikroTik] ip firewall rule forward> :put (10+1 -6*2=11-12=2+(-3)=-1)
false
[admin@MikroTik] ip firewall rule forward> :put (10+1 -6*2=11-12=(2+(-3)=-1))
true
[admin@MikroTik] ip firewall rule forward
Логическое отрицание(NOT)
[admin@MikroTik] interface> :put (!true)
false
[admin@MikroTik] interface> :put (!(2>3))
true
[admin@MikroTik] interface>
Унарный минус
[admin@MikroTik] interface> :put ( -1<0)
true
[admin@MikroTik] > :put ( --1)
1
Побитовое инвертирование
[admin@MikroTik] interface> :put (~255.255.0.0)
0.0.255.255
[admin@MikroTik] interface>
Суммирование
[admin@MikroTik] interface> :put (3s + 5s)
8s
[admin@MikroTik] interface> :put (10.0.0.15 + 0.0.10.0)
ERROR: cannot add ip address to ip address
[admin@MikroTik] interface> :put (10.0.0.15 + 10)
10.0.0.25
[admin@MikroTik] interface>
Вычитание
[admin@MikroTik] interface> :put (15 - 10)
5
[admin@MikroTik] interface> :put (10.0.0.15 - 10.0.0.3)
12
[admin@MikroTik] interface> :put (10.0.0.15 - 12)
10.0.0.3
[admin@MikroTik] interface> :put (15h - 2s)
14h59m58s
[admin@MikroTik] interface>
Умножение
[admin@MikroTik] interface> :put (12s * 4)
48s
[admin@MikroTik] interface> :put ( -5 * -2)
10
[admin@MikroTik] interface>
Деление
[admin@MikroTik] interface> :put (10s / 3 )
3s333.333ms
[admin@MikroTik] interface> :put (5 / 2)
2
[admin@MikroTik] interface>
Сравнение
[admin@MikroTik] interface> :put (10.0.2.3<=2.0.3.10)
false
[admin@MikroTik] interface> :put (100000s>27h)
true
[admin@ikroTik] interface> :put (60s,1d!=1m,3600s)
false
[admin@MikroTik] interface> :put (bridge=routing)
false
[admin@MikroTik] interface> :put (yes=false)
false
[admin@MikroTik] interface> :put (true=aye)
ERROR: cannot compare if truth value is equal to string
[admin@MikroTik] interface>
Логическое AND, логическое OR
[admin@MikroTik] interface> :put ((yes && yes) || (yes && no))
true
[admin@MikroTik] interface> :put ((no || no) && (no || yes))
false
[admin@MikroTik] interface>
Побитовый AND, побитовый OR, побитовый XOR
[admin@MikroTik] interface> :put (10.16.0.134 & ~255.255.255.0)
0.0.0.134
[admin@MikroTik] interface>
Оператор cдвигов
[admin@MikroTik] interface> :put (~((0.0.0.1 << 7) - 1))
255.255.255.128
[admin@MikroTik] interface>
Конкатенация
[admin@MikroTik] interface> :put (1 . 3)
13
[admin@MikroTik] interface> :put (1,2 . 3)
1,2,3
[admin@MikroTik] interface> :put (1 . 3,4)
13,4
[admin@MikroTik] interface> :put (1,2 . 3,4)
1,2,3,4
[admin@MikroTik] interface> :put ((1 . 3) + 1)
ERROR: cannot add string to integer number
[admin@MikroTik] interface>
Типы данных
Описание
Консоль может работать с несколькими типами данных. В настоящее время различаются
строки, булевые значения, числа, временные интервалы, ip адреса, внутренние числа и
списки. Текущая консоль сначала пытается конвертировать значение в определенный тип,
возвращает его в случае неудачи. Ниже представлен порядок в котором консоль пытается
выполнить конвертирование значения:
list
internal number
number
IP address
time
boolean
string
Возможности явно управлять преобразованием типа НЕТ
В консоли целое это внутреннее представление 64 битного знакового, таким образом
диапазон значений переменных может быть от -9223372036854775808 до
9223372036854775807. Так же можно ввести их как шестнадцатери чные числа, путем
добавления префикса 0x. Списки пишутся через запятую отделяя последовательнос ть
значений. Ввод пробелов до и после запятых не рекомендуется, потому что консоль может
не различить границы слова.
Булевые значения пишутся как true и false. Консоль также различает yes для true и no для
false. Ввод внутренних чисел начинается с *.
Временные интервалы задаются последовательностью чисел. За ними также следовать
специфические символы определенные для единиц времени. Значение по умол чанию
секунда. Числа могут быть с пл авающей точкой. Также значение может быть задано в
нотации HH:MM:SS. Ниже представлены принятые единицы времени:
d, day, days - один день, то есть 24 часа
h, hour, hours- один час
m, min - одна минута
s - одна секунда
ms - одна милисекунда, то есть 0.001 секунды
Внутренние консольные выражения
Описание
В пределах этого документа, ICE обращаются к внутренним консольным команда м и
выражениям, вне зависимости от текущего уровня меню.
Эти команды непосредственно не изменяют конфигурацию, но они полезны для
автоматизации различных процессов. К полному списку доступных ICE можно
обратиться, набрав '?' после префикса ':'.
Описание команд
beep - это действие вынуждает встроенное звуковое устройство подавать звуковой сигнал
продолжительностью length(секунд) c frequency(частотой) Гц.
Пример
[admin@MikroTik] > :beep length=2s frequency=10000
[admin@MikroTik] >
delay(задержка) - то есть ничего не делать заданно е количество времени. Требует один
аргумент задающий время ожидания значение по умолчанию одна секунда.
do - это действие требует один аргумент, содержащий консольные команды которые
должны быть исполнены. Оно подобно утверждению do других команд. Точно также
имеет два параметра while и if. Если нет ни одного параметра do выполнит код единожды.
Однако если вы определите условие для аргумента while оно будет вычисленно после
выполнения всех команд и если будет возвращено истина утверждение do будет
исполняться еще раз и еще раз до тех пор пока не будет возвращено ложь. Если вы
определили условие для утверждения if то оно будет выполнено однажды до какого
нибудь утверждения else и если утверждение false то ничего не будет выполнено.
Пример
[admin@MikroTik] > {:global i; :set i 10; :do{:put $i; :decr i;}
... while (($i < 10) && ($i > 0)); :unset i;}
10
9
8
7
6
5
4
3
2
1
[admin@MikroTik] >
environment print это действие печатает информацию о переменных. Все глобальные
переменные перчислены в загаловке Global Variables. Все остальные переменные
определенные в этом сценарии( локальные переменные определены как :local или как
утверждения :for или :foreach , глобальные переменные определены как :global, вкратце,
все переменные могут быть и спользованы внутри текущего сценария ) перечислены в
заголовке Local Variables.
Пример
[admin@MikroTik] > :environment print
Global Variables
g1=this is global variable
Local Variables
g1=this is global variable
l1=this is local variable
counter=2
[admin@MikroTik] >
for это действие требует один аргумент - переменную цикла. Это утвержден ие может
иметь четыре параметра from, to, step и do. Первые два параметра указывают границы для
счетчика цикла. Интервал также включает эти два значения. Тр етий использует одно
значение, определяющее шаг декремента или инкремента. Ну и наконец утверждение do
заставляет консоль повторять команды.
Пример
[admin@MikroTik] > :for i from=1 to=100 step=37 do={:put ($i . " - " . 1000/$i)}
1 - 1000
38 - 26
75 - 13
[admin@MikroTik] >
foreach - это действие использует один аргумент, имя переменной цикла . Оно также имеет
два параметра in и do. Параметр in рассматривает как список каждое значение
присвоенное переменной цикла, а утверждение do выполняет код для этого значения.
Если значение in не спиок то утверждение do выполняется единожды. В случае пустого
значения in утверждение do не выполняется вообще. Это один из способов оптимизации
работы с командой find, которая возвращает список внутренних номеров и мож ет вернуть
пустой список или один внутренний номер. Рассмотрим пример печати всех сетевых
интерфейсов, для начала получим имена интерфейсов, а затем по именам отобразим ip
адреса.
[admin@MikroTik] > :foreach i in=[/interface find type=ether ] do={
{... :put [/interface get $i name]
{... :foreach j in=[/ip address find interface=$i] do={
{{... :put [/ip address get $j address]
{{... }
{... }
ether1
ether2
10.0.0.65/24
[admin@MikroTik] >
Дествие if требует один аргумент - логическое условие, то есть выражение которое может
вернуть булевое значение. Это действие также может иметь два параметра do и else. Если
логическое выражение вычислено как true то часть кода после do исполняется, иначе
выполняется else. Замечание часть else опциональна (её может и не быть).
Пример
[admin@MikroTik] > :if (yes) do={:put yes} else={:put no}
true
[admin@MikroTik] > :if ([/ping 10.0.0.1 count=1] = 0) do {:put "gw unreachable"}
10.0.0.1 pong timeout
1 packets transmitted, 0 packets received, 100% packet loss
gw unreachable
[admin@MikroTik] >
Дествие log добавляет сообщения в системный журнал. Это действие имеет два
параметра, message который содержит строку необходимую для добавления в журнал и
facility(средство), которое решает каким образом сообщение будет добавлено в журнал.
Параметр facility по умолчанию определен в System-info
Пример
[admin@MikroTik] > :log facility=Firewall-Log message="Very Good <br /><br />... Thing
happened. We have received our first packet!"
[admin@MikroTik] >
put - это действие требует один аргумент, который будет отображен в консоли.
resolve - это действие требует один аргумент, DNS -имя и резолвит его в ip адрес хоста. Вы
должны сконфигурировать DNS на маршрутизаторе в ( /ip dns подменю) до использования
этого действия.
[admin@MikroTik] ip route> /ip dns set primary -dns=159.148.60.2
[admin@MikroTik] ip route> :put [:resolve www.example.com]
192.0.34.166
time - это действие вычисляет время необходимое для выполнения консольной команды.
Это действие требует один аргумент, который содержит консольные команды к которым
надо привязать действие time. Команды исполняются единожды и возвращается полное
вычисленное время.
Пример
[admin@MikroTik] > :put [:time {:delay}]
1s34.31ms
[admin@MikroTik] >
while - это действие требует один аргумент, логическое условие, то есть выражение
которое возвращает булевое значение. Это действие также может иметь один параметр do.
Логическое условие вычисляется каждый раз до выполнения утверждения do.
Пример
[admin@MikroTik] > {:global i; :set i=0; :while ($i < 10)
... do={:put $i; :incr i;}; :unset i;}
0
1
2
3
4
5
6
7
8
9
[admin@MikroTik] >
Специальные действия
Описание
Monitor
Это возможность доступа к значениям отображаемым многими дейст виями monitor и
полученными из сценариев.
Если действие monitor содержит аргумент do то можно подставлять любое название
сценария (см. /system script) или консольной команды.
Get
Это также возможность доступа к значениям сценария отображаемым большинс твом
действий print. Во многих уровнях команд доступно действие print, в действии get оно
также есть. Это действие требует один или два аргумента. Если это уровни команды get то
мы имеем дело со списком элементов, первый аргумент это имя или внутренний н омер
переменной. Второй аргумент это название свойст ва элемента которое должно быть
возвращено.
Примечание
Действие monitor с аргументом do также может быть вызвано из непоср едственно из
сценария. Тогда на экране не будет напечатано ничего просто буде т выполняться взятый
сценарий.
Название свойств могут быть доступны через get также как м в действии print, плюс
название флагов элемента(которые заблокированы в примере приведенном ниже). Вы
можете использовать ключ завершения [tab] для просмотра любых специфичных свойств
которые может вернуть действие get.
Пример
В приведенном ниже примере действие monitor будет исполнять взятый сценарий все
время выводя на экран статистику, и будет присваивать все напечатанные значения
локальным переменным с их не посредственными именами.
[admin@MikroTik] interface> monitor -traffic ether2 once do={:environment print}
received-packets-per-second: 0
received-bits-per-second: 0bps
sent-packets-per-second: 0
sent-bits-per-second: 0bps
Global Variables
i=1
Local Variables
sent-bits-per-second=0
received-packets-per-second=0
received-bits-per-second=0
sent-packets-per-second=0
[admin@MikroTik] interface>
Дополнительные особенности
Описание
Одна из возможностей это добавление комментариев в сценарий. Если строка сценария
начинается '#', то все символы до начала новой строки игнорируются.
Другая возможность это добавление нескольких команд в одну строку, раз делив их
символом ';'. Консоль обрабатывает символ ';' как конец строки отделяя так им образом
команды в тексте сценария.
Если вы хотите использовать любой из символов {}[]"'$, вам необходимо предварять их
символом ''(экранировать). Консоль распознает любой символ следующий за ''
литеральным, не присва ивая им значения за исключением следующих случаев.
a bell (alarm), character code 7( звонок)
b backspace, character code 8( обратный пробел)
f form feed, character code 12( перевод страницы)
n newline, character code 10( новая строка)
r carriage return, character code 13
t tabulation, character code 9(табуляция)
v vertical tabulation, character code 11( вертикальная табуляция)
_ space, character code 32( пробел)
Замечание этот '' сопровождается любым количеством символов(пробел, новой строки,
перевода каретки, табуляции) сопровождаемый символ новой строки обрабатывается как
одиночный, за исключение внутренних ограничений когда он обрабатывается как ничто.
Эта возможность используется консолью для разбивки слишком длинных ст рок в
сценариях сгенерированными экспортными командами .
Сценарии
Уровень меню: /system script
Описание
В RouterOS сценарий может быть запущен тремя различными способами.
согласно определенному расписанию
по событию например, если обозреватель сети(netwatch tool) не получает ответа на
ping
вызывается другим сценарием
Свойство описания
last-started(time). Дата и время последнего вызова сценария. Па раметр показывается
только если run-count!=0
owner(имя; по умолчанию: admin) - имя пользователя создавшего сценарий.
policy(многократный выбор: ftp | loca l | policy | read | reboot | ssh | telnet | test | web | write; по
умолчанию: reboot,read,write,policy,test ) список применяемых политик:
ftp - пользователь может зайти удаленно через ftp и посылать или искать файлы прямо с
маршрутизатора
local - пользователь может зайти локально через консоль
policy - политики управления пользователя, добавление и удаление пользователя
read - пользователь может просматривать конфигурацию
reboot - пользователь может перезагружать маршрутизатор
ssh - пользователь может заходить удаленно через secure shell
<;;;b>telnet - пользователь может зайти удаленно через telnet
test - пользователь может запускать ping, traceroute и тест пропускной способности
web - пользователь может заходить удаленно через http
write - пользователь может просматривать и изменять конфигурацию
run-count(целое; по умолчанию 0) - счетчик использования сценария. Этот счетчик
увеличивается каждый раз когда сценарий исполняется. Счетчик сбрасывается после
перезагрузки.
(текст; по умолчанию: "") - непосредственно код сценария.
Описание команд
run(имя) - исполнение взятого сценария.
Примечание
Вы не можете сделать в сценарии больше чем вам разрешено вашими пользовательскими
правами. Например если есть группа политик в /user group для которой разрешены
ssh,local,telnet,read,write,policy,test,web то вы не сможете создать сценарий
перезагружающий маршрутизатор.
Пример
[admin@MikroTik] system script> add name=log -test source={:log
... message="Hello World!"}
[admin@MikroTik] system script> print
0 name="log-test" source=":log message="Hello World!"" owner="admin"
policy=reboot,read,write,policy,test last -started=dec/06/1999 20:07:37
run-count=1
[admin@MikroTik] system script>

Спонсоры данной статьи


Категория: Документация | Добавил: -=shurf=- (26.07.2010)
Просмотров: 7916 | Рейтинг: 0.0/0

Настройка Mikrotik
Как настроить MySQL
RouterOS на офисном шлюзе, час...
RouterOS на офисном шлюзе, час...
Mikrotik - QoS, Bandwidth cont...
OSPF
Mikrotik Burst Limit и ABills
Mikrotik. FireWall задача посл...
FTP server
Mikrotik и VLAN
Серверные сценарии ч.2

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Профиль
Привет: Гость

Сообщения:

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или войдите!

Реклама

Наш опрос
Нужен ли этому сайту форум?
Всего ответов: 55

Нашел ошибку?
Система Orphus

Статистика

Онлайн всего: 2
Гостей: 1
Пользователей: 1
Kamorkaskn



Бесплатный хостинг uCoz