Писати скрипти для 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.