Писати скрипти для Mikrotik RouterOS

Писати скрипти для Mikrotik RouterOS – це просто

Автор: admin від 1-11-2014, 00:57, подивилося: 2349

Справа залишилася за малим — автоматично формувати цей список. Хто ще не втомився від моєї писанини, запрошую під хабракат.

Текст скрипта потрібно додати до репозиторій скриптів, що знаходиться в розділі /system scripts. Скрипт виконується рядково. Кожен рядок має наступний синтаксис: [prefix] — ":" — для глобальних команд, з символу "/" починається командний рядок, який виконуватиметься щодо кореня конфігурації, префікс може бути відсутній, тоді командний рядок виконується щодо поточного розділу конфігурації; [path] — шлях до необхідного розділу конфігурації, яким відбувається перехід перед виконанням команди; command — безпосередньо дію, виконуване командним рядком; [uparam] — безіменний параметр команди; [param= [value]] - іменовані параметри та їх значення.

Отже, насамперед, визначимо параметри роботи скрипта як змінних. Змінна оголошується командами :local і :global, відповідно отримуємо локальну змінну, доступну тільки всередині своєї зони видимості, або глобальну, яка додається до списку змінних оточення ОС і буде доступна звідки завгодно. Локальні змінні живуть, поки виконується їх зона видимості, глобальні — поки ми їх не видалимо.

Перейдемо до розділу конфігурації /ip firewall address-list і видалимо всі записи, в яких назва списку містить значення змінної $ListName. Конструкція із квадратних дужок дозволяє в рамках поточної команди виконати іншу, а результат виконання передати поточній у вигляді параметра.

перейдемо розділ конфігурації /ip dns cahe all. Там містяться DNS-кеш роутера у вигляді таблиці Name - Type - Data - TTL. Виконаємо відбір за типом – нам потрібні лише A-записи. І результат відбору обійдемо у циклі «для кожного». Це буде головним циклом нашого скрипта.

Створимо змінні, що оновлюються в кожному циклі: два прапори - bNew, що виключає дублювання, match, що показує, чи входить поточний запис кешу до нашого списку доменів; змінна cacheName містить поле Name поточного запису кешу, тобто домен.

Обійдемо список доменів і для кожного перевіримо, чи міститься в рядку cacheName підрядок у вигляді домену з цього списку.

Якщо міститься, встановимо значення прапора match у true.