Помощь в написании скриптов для RouterOS

раздел для тех, кто начинает знакомиться с mikrotik
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там export. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1543
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Помощь в написании скриптов для RouterOS

Сообщение Dragon_Knight » 06 янв 2017, 05:37

Все мы знаем, что разработчики очень странные и явно употребляют какие-то вещества, ибо такой ... скриптовый язык сделать в трезвом уме невозможно, особенно на фоне того, что существует куча готовых языков, идеально подходящие под эти задачи: sh, Lua, Perl, ... PHP в конце концов, но....

Собственно в честь открытия этой темы, позвольте мне задать первые вопросы:
Как утилитой fetch положить принятый ответ сразу в переменную, не прибегая к насилованию NAND памяти (сохранить в файл, прочитать в переменную, удалить файл). Если никак, тогда как отловить результат работы утилиты fetch (true || false). У меня получается или получить результат, при этом файл с ответом сервера не создаётся, или создать файл с результатом ответом сервера, но успешность запроса - пустая строка.

Помощь в ремонте настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
vqd
Модератор
Сообщения: 3810
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Re: Помощь в написании скриптов для RouterOS

Сообщение vqd » 06 янв 2017, 07:41

Простой язык, для тонкой настройки роутера функционала почти хватает

Код: Выделить всё

:do {
/tool fetch keep-result=no url=http://download2.mikrotik.com/swos/1.17/swos-rb260-1.17.lzb
:put true
} on-error={:put false}
Есть интересная задача и бюджет? http://mikrotik.site
podarok66
Модератор
Сообщения: 3339
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Re: Помощь в написании скриптов для RouterOS

Сообщение podarok66 » 06 янв 2017, 10:42

По языку у меня совсем другое мнение. Разработчики молодцы. Перед ними стояла задача создать интуитивно понятный язык, пригодный к освоению в кратчайшие сроки пользователями, далекими от написания кода. С задачей они справились неплохо. Всё логично, вытекает одно из другого, перекликается с визуальной реализацией (Winbox, Webfig)...
Понятно, что с точки зрения продвинутого кодописателя язык беден и негибок. Но ориентировались не на них. Ниша у продукции совсем другая. Хотя, vqd в своё время высказывал очень здравую мысль о том, что можно было бы давать расширенный функционал за отдельную плату. Я согласен без GUI-вариантов. Оплатил бы и не задумался. Вполне возможно, что со временем такое и будет реализовано. Например в 8 версии программного обеспечения :-)
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1543
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Re: Помощь в написании скриптов для RouterOS

Сообщение Dragon_Knight » 06 янв 2017, 17:33

vqd, про do {} on-error={} я как-то забыл... уже какой раз. Спасибо.

Язык-то простой, не спорю, но из-за его попытки угодить новичкам, появляются такие моменты, которые вызывают когнитивный диссонанс...
А 8 версия ROS выйдет сразу после выхода Half-Life 3, да и не факт что скриптовый язык будет меняться, ибо если они её поменяют, то представьте, - все скрипты что есть сейчас можно будет удалять...

Помощь в ремонте настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1543
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Re: Помощь в написании скриптов для RouterOS

Сообщение Dragon_Knight » 06 янв 2017, 22:05

И вот я поправил свою функцию и всё равно меня очень напрягает момент использования flash памяти как буфер...
Простая математика: Я экспериментирую на устройстве RB951-2n, т.к. там уже флешка посыпалась и нужно её перепаивать.. Так вот там стоит память K9F1208U0C-P, на 3 станице написано: "Endurance: 100K Program/Erase Cycles (with 1bit/512Byte ECC)". Допустим скрипт будем выполнять каждую минуту. Считаем: 100000 / (1 * 24 * 60) = ~69.5 дня. Т.е. каждые два месяца мы получаем кирпич, у которого нужно менять флешку. Даже если учесть хитрые алгоритмы распределения данных по памяти, которые максимум продлят жизнь флешки в два - три раза... Всё равно перспектива менять роутера каждые 3 - 4 квартала не радует....

Код: Выделить всё

:local GetUpdate do={
   :local result;
   
   :do {
      /tool fetch url=($CFGURL . "\?id=" . $CFGID . "&mode=update") mode=http keep-result=yes dst-path=update.fetch;
      :delay 1s;
      :set result [/file get [/file find name=update.fetch] contents];
      /file remove [/file find name=update.fetch];
   } on-error={
      :log error "[*]: Error receiving data.";
      :set result false;
   };
   
   :return $result;
};

Помощь в ремонте настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1543
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Re: Помощь в написании скриптов для RouterOS

Сообщение Dragon_Knight » 09 янв 2017, 16:54

А есть способ получить код ошибки HTTP из утилиты fetch? Например что-бы если код 200, то пишу результат в файл, а если другой, то просто возвращаем этот код?
Всё думаю над оптимизацией насилования флешки...

Помощь в ремонте настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
vqd
Модератор
Сообщения: 3810
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Re: Помощь в написании скриптов для RouterOS

Сообщение vqd » 10 янв 2017, 04:12

нет к сожалению.

Насчет насилования флешки, у меня есть проект большой где с десяток 1016 пашут круглые сутки и обмениваются данными с другими микротикам. Флешка там нагружена очень сильно (с десяток скриптов на нее постоянно что то пишут и читают), так вот за 2 года еще ни один микротик не упал.

Был еще один клиент который боялся за флешку, воткнул обычную УСБ на нее все пишет. Работает так уже с год
Есть интересная задача и бюджет? http://mikrotik.site
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1543
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Re: Помощь в написании скриптов для RouterOS

Сообщение Dragon_Knight » 10 янв 2017, 16:26

vqd, спасибо за ответ.
Ну вероятнее всего алгоритмы кеширования делают своё дело.

А вот пришла идея, что если ответ от сервера будет пустой ( Content-Length: 0 )?
Дома попробую и отпишусь.
ADD: Нет, даже если результат пустой, файл обновляется :(

Помощь в ремонте настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];

Вернуться в «FAQ (Для начинающих)»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость