Files
openclaw/skills/mikrotik-api/SKILL.md
2026-02-24 19:25:39 +00:00

4.9 KiB
Raw Blame History

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:

  1. Сними текущее состояние через print.
  2. Проверь .id целевого объекта.
  3. Применяй изменения по одной команде.
  4. Сразу валидируй результат повторным print.

Ссылки

  • Основные заметки по протоколу: references/routeros-api-notes.md
  • Практические шаблоны: references/common-operations.md