4.9 KiB
4.9 KiB
name: mikrotik-api
description: Управление MikroTik RouterOS через API (TCP 8728/8729): логин, print/getall, выборка через query, безопасная проверка статуса, интерфейсов, адресов, маршрутов и других разделов. Использовать, когда нужно читать/менять конфиг RouterOS программно, проверять состояние роутера или готовить автоматизацию под RouterOS API.
MikroTik API
Используй этот скилл для работы с RouterOS API на уровне «команда/атрибуты/ответы».
Быстрый старт
python3 {baseDir}/scripts/routeros_api.py \
--host 192.168.88.1 --user admin --password 'secret' \
cmd /system/resource/print
С .proplist:
python3 {baseDir}/scripts/routeros_api.py \
--host 192.168.88.1 --user admin --password 'secret' \
print /interface/print --proplist name,type,running,disabled
С query:
python3 {baseDir}/scripts/routeros_api.py \
--host 192.168.88.1 --user admin --password 'secret' \
print /ip/route/print --query '?dst-address=0.0.0.0/0' --query '?active=true'
Правила работы
- Сначала проверяй доступность API-сервиса (
8728/8729). - По умолчанию используй чтение (
print,getall) и минимальный.proplist. - Для долгих задач учитывай ответы
!trap,!done,!re. - Для параллельных запросов используй
.tag. - Не отправляй опасные команды (
reboot,reset, массовые remove/set`) без явного подтверждения пользователя.
Что делает скрипт
routeros_api.py:
- логин post-v6.43 (
/login,=name=,=password=), - отправка произвольной команды
cmd, - упрощённый режим
printс query и.proplist, - JSON-вывод по reply-фреймам (
!re,!done,!trap,!fatal).
Ограничения
- Сейчас реализован plaintext API (8728). Для TLS/API-SSL нужен отдельный режим.
- Скрипт не делает бесконечный
listen-цикл; он рассчитан на запрос-ответ.
Готовые безопасные команды (типовые задачи)
1) Статус роутера
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /system/resource/print --proplist uptime,version,board-name,cpu-load,free-memory,total-memory
2) Список интерфейсов
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /interface/print --proplist .id,name,type,running,disabled,mtu
3) IP-адреса на интерфейсах
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /ip/address/print --proplist .id,address,interface,disabled
4) DHCP leases
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /ip/dhcp-server/lease/print --proplist .id,address,mac-address,host-name,status,server,last-seen
5) Маршруты по умолчанию
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /ip/route/print --proplist .id,dst-address,gateway,distance,active,disabled --query '?dst-address=0.0.0.0/0'
6) DNS-настройки
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /ip/dns/print --proplist servers,allow-remote-requests,cache-size,cache-used
7) Wi-Fi (legacy wireless)
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /interface/wireless/print --proplist .id,name,ssid,frequency,band,mode,disabled,running
8) Wi-Fi (wifiwave2)
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /interface/wifi/print --proplist .id,name,ssid,configuration.disabled,running
Осторожно с изменениями
Перед командами set/add/remove:
- Сними текущее состояние через
print. - Проверь
.idцелевого объекта. - Применяй изменения по одной команде.
- Сразу валидируй результат повторным
print.
Ссылки
- Основные заметки по протоколу:
references/routeros-api-notes.md - Практические шаблоны:
references/common-operations.md