mikrotik api php примеры

Manual:API

Contents

Summary

Application Programmable Interface (API) allows users to create custom software solutions to communicate with RouterOS to gather information, adjust configuration and manage router. API closely follows syntax from command line interface (CLI). It can be used to create translated or custom configuration tools to aid ease of use running and managing routers with RouterOS.

To use API RouterOS version 3.x or newer is required.

By default API uses port #8728 and service is enabled. More on service management see in corresponding manual section. Corresponding service name is api

Protocol

API words

Length of the word is encoded as follows:

Value of length# of bytesEncoding
0 = 0x1000000050xF0 and len as four bytes

Command word

First word in sentence has to be command followed by attribute words and zero length word or terminating word. Name of command word should begin with ‘/’. Names of commands closely follow CLI, with spaces replaced with ‘/’. There are commands that are specific to API;

Command word structure in strict order:

API specific commands:

Command word content examples:

Attribute word

Each command word has its own list of attribute words depending on content.

Atribute word structure consists of 5 parts in this order:

Note: Value can hold multiple equal signs in the value of attribute word since the way word is encoded

Note: Value can be empty

Examples without encoded length prefix:

Warning: Order of attribute words and API parameters is not important and should not be relied on

API attribute word

API attribute word structure is in strict order:

Currently the only such API attribute is tag.

Note: If sentence contain API attribute word tag then each returned sentence in reply from router to that tagged sentence will be tagged with same tag.

Query word

Senteces can have additional query paramteres that restrict their scope. They are explained in detail in separate section.

Example of sentence using query word attributes:

Warning: Order of query words is significant

Reply word

It is sent only by the router. It is only sent in response to full sentence send by the client.

API sentences

API sentence is main object of communication using API.

Note: Zero length word terminates the sentence. If it is not provided router will not start to evaluate sent words and will consider all the input as part of the same sentence.

Initial login

Login method pre-v6.43:

Warning: this login method is deprecated and no longer supported in versions above 6.45.1.

Note: that each command and response ends with an empty word.

Login method post-v6.43:

Command description

Queries

print command accepts query words that limit set of returned sentences. This feature is available since RouterOS 3.21.

Warning: Regular expressions are not supported in API, so do not try to send query with

print command can return OID values for properties that are available in SNMP. This feature appeared in 3.23 version.

In console, OID values can be seen by running ‘print oid’ command. In API, these properties have name that ends with «.oid», and can be retrieved by adding their name to the value of ‘.proplist’. An example:

Источник

Mikrotik api php примеры

mikrotik api php примеры. Смотреть фото mikrotik api php примеры. Смотреть картинку mikrotik api php примеры. Картинка про mikrotik api php примеры. Фото mikrotik api php примеры mikrotik api php примеры. Смотреть фото mikrotik api php примеры. Смотреть картинку mikrotik api php примеры. Картинка про mikrotik api php примеры. Фото mikrotik api php примеры mikrotik api php примеры. Смотреть фото mikrotik api php примеры. Смотреть картинку mikrotik api php примеры. Картинка про mikrotik api php примеры. Фото mikrotik api php примеры mikrotik api php примеры. Смотреть фото mikrotik api php примеры. Смотреть картинку mikrotik api php примеры. Картинка про mikrotik api php примеры. Фото mikrotik api php примеры

RouterOS API Client

This library is partly based on this old project, but unlike it has many innovations to ease development. In addition, the project designed to work with PHP7/8 in accordance with the PSR standards.

You can use this library with pre-6.43 and post-6.43 versions of RouterOS firmware, it will be detected automatically on connection stage.

Laravel framework support

RouterOS API client is optimized for usage as normal Laravel package, all functional is available via \RouterOS facade, for access to client object you need instead:

Use the facade and pass array of parameters to client method:

You also may get array with all configs which was obtained from routeros-api.php file:

By default, the package will automatically register its service provider, but if you are a happy owner of Laravel version less than 5.5, then in a project, which is using the package (after composer require is done, of course), add into providers block of your config/app.php :

Optionally, publish the configuration file if you want to change any defaults:

Basic example, analogue via command line is /ip hotspot ip-binding print :

Basic example for update/create/delete types of queries:

If you need export all settings from router:

Examples with «where» conditions, «operations» and «tag»:

All available examples you can find here.

How to configure the client

You just need create object of Client class with required parameters in array format:

List of available configuration parameters

How to enable support of legacy login schema (RouterOS pre-6.43)

From 0.8.1 this is not important, version of firmware will be detected automatically.

How to write queries

You can write absolutely any queries to your router, for this you need to create a «Query» object whose first argument is the required command, after this you can add the attributes of the command to «Query» object.

More about attributes and «words» from which these attributes should be created here.

More about «expressions», «where», «equal» and other filters/modifications of your query you can find here.

Simple usage examples of Query class:

Read response as Iterator

By default, original solution of this client is not optimized for work with a large amount of results, only for small count of lines in response from RouterOS API.

But some routers may have (for example) 30000+ records in their firewall list. Specifically for such tasks, a method readAsIterator has been added that converts the results obtained from the router into a resource, with which it will later be possible to work.

You could treat response as an array except using any array_* functions

You can simplify your code and send then read from socket in one line:

Unable to establish socket session, Operation timed out

This error means that the library cannot connect to your router, it may mean router turned off (then need turn on), or the API service not enabled.

Or via command line:

How to update/remove/create something via API?

Undefined character (any non-English languages)

RouterOS does not support national languages, only English (and API of RouterOS too).

You can try to reproduce it via web, for example add the comment to any element of your system, then save and reload the page, you will see unreadable characters.

You can use my other project with RouterOS in Docker container for running unit testing on your computer, for this you just need to have Expect, Docker and Docker Compose.

Источник

Подключение к API Mikrotik средствами библиотеки PHP

В этой статье рассмотрим подключение и взаимодействие с API Mikrotik с помощью библиотеки PEAR2_Net_RouterOS, написанной на PHP. Предварительная установка По умолчанию, на версиях RouterOS ниже 6.0, API выключено. Для того, чтобы включить API необходимо в консоли (терминале Mikrotik) выполнить следующую команду: где address – IP адрес, с которого будет разрешено подключение к микротику (в данном […]

mikrotik api php примеры. Смотреть фото mikrotik api php примеры. Смотреть картинку mikrotik api php примеры. Картинка про mikrotik api php примеры. Фото mikrotik api php примеры

В этой статье рассмотрим подключение и взаимодействие с API Mikrotik с помощью библиотеки PEAR2_Net_RouterOS, написанной на PHP.

Предварительная установка

По умолчанию, на версиях RouterOS ниже 6.0, API выключено. Для того, чтобы включить API необходимо в консоли (терминале Mikrotik) выполнить следующую команду:

где address – IP адрес, с которого будет разрешено подключение к микротику (в данном примере 192.168.170.157).

Если нужно включить API по умолчанию на все IP адреса, то необходимо выполнить следующую команду:

Кроме того, необходимо проверить, чтобы порт API не был закрыт фильтрами. Сделать это можно на вкладке: IP->Firewall->FilterRules.

Подключение библиотеки PEAR2_Net_RouterOS

Итак, будем производить подключение к API микротика с помощью библиотеки PEAR2_Net_RouterOS. Первым делом ей необходимо скачать. Вся библиотека, с документами и тестовыми скриптами доступна на GitHub по следующей ссылке: https://github.com/pear2/Net_RouterOS

Данный вид скачивания предоставит нам библиотеку в привычном архивном формате. Следующим шагом необходимо распаковать полученный архив в директорию с проектом PHP (в котором будем подключать библиотеку).

Подключение библиотеки phar-формата

Также данную библиотеку можно встретить в формате phar. Подключение её в таком виде производится несколько сложнее. К примеру, использование phar не всегда включено по умолчанию в конфигурационных файлах php.

Рассмотрим, как подключить поддержку файлов phar в php на примере CentOS 6.9. Для этого открываем в текстовом редакторе файл /etc/php.d/phar.ini:

В нём проверяем, что строка extension=phar.so не закомментирована.

Для подключения самой библиотеки в коде модуля PHP прописываем:

В случае если по каким-то причинам подключить библиотеку phar не удалось, можно её распаковать командой:

и воспользоваться инструкцией ниже.

Подключение обычным PHP-файлом

Если библиотека изначально была не в формате phar, то её можно подключить в качестве связки обычных PHP-файлов. Для этого в коде модуля PHP прописываем:

Теперь рассмотрим простейший пример подключения к API микротика.

Пример подключения

В данном разделе будет рассмотрен пример подключения более детально. Весь код примера будет доступен в разделе ниже.

Для рассмотрения примера подключения, создадим файл index.php. В него пропишем следующий код:

В данном случае подключение производится с помощью файла Autoload.php (метод 2), а не phar.

Коннект к API микротика производится в строке: new RouterOS\Client(‘192.168.170.198’, ‘admin’, »), где, в качестве параметров, передаются IP адрес микротика, логин и пароль для подключения. Если подключение выполнено успешно, то в браузере увидим надпись «ОК». В противном случае, увидим ошибку.

Теперь, когда подключение к API микротика успешно установлено, выведем какой-нибудь полезный результат.

Получение и парсинг результатов

Работу с API рассмотрим на примере вывода текущего списка IP адресов (вкладка IP->Addresses).

Первое, что делаем – выполняем подключение к API микротика, которое описано в предыдущем пункте.

Далее выполняем запрос на получение списка IP адресов:

$request = new RouterOS\Request(‘/ip/address/print’);

В качестве параметра RouterOS\Request передаём команду, структура которой аналогична команде получения IP адресов в консоли микротика, за исключением одного: вместо пробелов при записи команды в консоли здесь используются «/».

Выполняется запрос командой

Запускаем цикл по всему массиву:

Проверяем, чтобы тип ответа был одним из зарезервированных:

И получаем необходимые значения:

Для получения параметра disabled воспользуемся тернарным оператором:

Выведем все переменные в удобочитаемом виде:

После чего закрываем if и цикл foreach.

Исходный код примера

Здесь приведём полный исходный код описанного выше примера:

На этом рассмотрение подключения к API Mikrotik средствами библиотеки PHP завершено.

Источник

Mikrotik RouterOS + PHP скрипт на сайте. Расширение возможностей

Во времена ROS 5.x была потребность поднимать туннель к роутеру с белым динамическим адресом. В ROS 5 мы задавали не имя, а IP-адрес. Варианта 2: сервис DDNS, реализацию которого рассмотрим вкратце и второй о котором и будет рассказ.

Появилась идея сделать центр куда бы роутеры рапортовали свои адреса, и считывали адреса других. Решено было пойти путем наименьшего сопротивления – сайт на РНР.

На данный момент реализовано пару несложных вещей.

Оглашение своего адреса

Реализовано через запрос к скрипту с указанием своего (роутера) имени и пароля:

Считывание чужого адреса

Опять же через ту же утилиту вызываем веб-скрипт:

dst-path=«adr.txt» – указываем что полученные данные сохранять в файл. На самой веб-странице у нас сугубо текст с адресом запрашиваемого роутера:

:global routeradr [/file get adr.txt contents] – глобальной переменной присваиваем значение содержимого файла. Потом эту переменную можно при менять по потребности и желанию.

Считывание скрипта из БД

Всё так же как в предыдущем скрипте, но файл мы импортируем в конфиг роутера, а потом удаляем этот файл.

Для чего это необходимо? Например, Вы по невнимательности обрезали себе доступ к роутеру в фаерволе. Тогда можно добавить на сайте скрипт для этого роутера с котором указываете исправленные правила фаервола. Роутер следуя расписанию конектится к сайту, там РНР смотрит есть ли в БД непереданные скрипты для этого роутера:

Сначала мы проверяем верно ли заданы пароль и номер роутера (чтобы никто другой не мог считать ваш скрипт, может вы там пароли в конфиге меняете), а потом смотрим какой скрипт стоит в очереди не переданных для этого роутера.

Этот метод не решает ВОЗНИКШИЕ проблемы, он помогает их предотвратить. То есть необходимо предварительно «подстелить соломки» и забить в scheduler раз в Х минут/часов проверку роутером наличия новых скриптов для него.

Так же этот метод хорош, когда роутер имеет серую айпишку, а доступ к нему надо получить из вне. Забиваем скрипт поднятия ВПН-туннеля к своей белой айпишке и через заданное время имеем доступ к устройству даже за 10-ю НАТами.

Вот такая вот коротенькая история. Буду раз замечаниям и идеям что еще можно прикрутить к такому сервису. В планах еще небольшая статистика – что бы роутер сливал в БД пару своих параметров, например температуру, загрузку процессора и прочие.

Как бонус кусок готовых скриптов, о которых я писал в начале, получения ip с имени хоста и добавления его в политику IPsec.

Плюс в том что работает в связке Mikrotik + мыльницы которые поддерживают ddns и ipsec (Dlink 804 на пример). Скрипт который достает из дднс имени удаленного пира IP адрес и вставляет его в нужную политику:

И скрипт который подставляет на удаленной стороне текущий ip в политику ipsec:

Источник

Mikrotik api php примеры

Ближайшие
тренинги Mikrotik

MTCUMEUser Management Engineer

Места
проведения

г. Санкт-Петербург, Крестовский остров, Северная дорога, дом 12.

г. Санкт-Петербург, ст. м. «Приморская»,
ул. Одоевского, д. 24 к. 1, 2 этаж

mikrotik api php примеры. Смотреть фото mikrotik api php примеры. Смотреть картинку mikrotik api php примеры. Картинка про mikrotik api php примеры. Фото mikrotik api php примеры

Заключительная часть цикла посвящена использованию централизованного инструмента управления устройствами с помощью API RouterOS с примерами для языка Python3.

АНОНС

В цикле статей «Автоматизация при эксплуатации оборудования MikroTik RouterOS» представлен обзор средств автоматизации, применяемых при эксплуатации оборудования на базе RouterOS. Решения применимы как к аппаратным решениям MikroTik, так и к облачным решениям, построенным на базе RouterOS.

Заключительная часть цикла посвящена использованию централизованного инструмента управления устройствами с помощью API RouterOS с примерами для языка Python3.

Использование API RouterOS

В рамках этой статьи будет рассматриваться взаимодействие с устройством через специальный программный интерфейс управления (API — application programming interface). По функциональности этот интерфейс аналогичен конфигурации устройства через telnet или ssh. Отличие состоит в том, что telnet и ssh относятся к интерфейсам взаимодействия устройства и человека, а API — взаимодейтствия устройства и устройства, т.е. MikroTik API как нельзя лучше подходит для целей автоматизации.

Ранее было сказано, что в качестве языка программирования при демонстрации работы с API RouterOS будет использоваться Python 3. RouterOS API Python 3 поддерживает взаимодействие с сетевыми устройствами через протоколы telnet и ssh, однако работа с этими модулями трудоёмка, например, результат выполнения команды необходимо выделять с помощью регулярного выражения из общего ответа устройства. Одним из модулей, который значительно упрощает взаимодействие с сетевыми устройствами, является модуль netmiko, однако на текущий момент в нём не реализована поддержка RouterOS. Синтаксис языка Python 3 в рамках статьи рассматриваться не будет.

Для взаимодействия с устройством необходимо включить поддержку API непосредственно на устройстве, перейдя в раздел “/ip services”. По-умолчанию API работает через порт 8728. Кроме того, RouterOS поддерживает защищённый вариант программного интерфейса API over SSL (api-ssl по-умолчанию использует порт 8729).

Разработчики RouterOS не предоставили библиотеки для работы через API для популярных языков программирования, однако описали протокол взаимодействия в официальной документации. Помимо описания протокола взаимодействия представлены примеры программ, в том числе для языка Python 3.

Взяв за основу файл с примером, при подготовке статьи был описан файл с классом ApiRos, позволяющий выполнить подключение и взаимодействие с устройством через API. Помимо этого, были добавлены три функции: для открытия/закрытия сокета и вывода ответа устройства на экран. При демонстрации будут использованы следующие функции и классы:

Следует упомянуть о формате команд, т.к. он отличается от синтаксиса, используемого при конфигурации вручную. Команды вводятся в виде списка, где первый элемент — команда, в которой пробелы заменяются на символ “/”, а последующие элементы уточняют запрос:

Во времена ROS 5.x была потребность поднимать туннель к роутеру с белым динамическим адресом. В ROS 5 мы задавали не имя, а IP-адрес. Варианта 2: сервис DDNS, реализацию которого рассмотрим вкратце и второй о котором и будет рассказ.

Появилась идея сделать центр куда бы роутеры рапортовали свои адреса, и считывали адреса других. Решено было пойти путем наименьшего сопротивления – сайт на РНР.

На данный момент реализовано пару несложных вещей.

Оглашение своего адреса

Реализовано через запрос к скрипту с указанием своего (роутера) имени и пароля:

Считывание чужого адреса

Опять же через ту же утилиту вызываем веб-скрипт:

dst-path=«adr.txt» – указываем что полученные данные сохранять в файл. На самой веб-странице у нас сугубо текст с адресом запрашиваемого роутера:

:global routeradr [/file get adr.txt contents] – глобальной переменной присваиваем значение содержимого файла. Потом эту переменную можно при менять по потребности и желанию.

Считывание скрипта из БД

Всё так же как в предыдущем скрипте, но файл мы импортируем в конфиг роутера, а потом удаляем этот файл.

Для чего это необходимо? Например, Вы по невнимательности обрезали себе доступ к роутеру в фаерволе. Тогда можно добавить на сайте скрипт для этого роутера с котором указываете исправленные правила фаервола. Роутер следуя расписанию конектится к сайту, там РНР смотрит есть ли в БД непереданные скрипты для этого роутера:

Сначала мы проверяем верно ли заданы пароль и номер роутера (чтобы никто другой не мог считать ваш скрипт, может вы там пароли в конфиге меняете), а потом смотрим какой скрипт стоит в очереди не переданных для этого роутера.

Этот метод не решает ВОЗНИКШИЕ проблемы, он помогает их предотвратить. То есть необходимо предварительно «подстелить соломки» и забить в scheduler раз в Х минут/часов проверку роутером наличия новых скриптов для него.

Так же этот метод хорош, когда роутер имеет серую айпишку, а доступ к нему надо получить из вне. Забиваем скрипт поднятия ВПН-туннеля к своей белой айпишке и через заданное время имеем доступ к устройству даже за 10-ю НАТами.

Вот такая вот коротенькая история. Буду раз замечаниям и идеям что еще можно прикрутить к такому сервису. В планах еще небольшая статистика – что бы роутер сливал в БД пару своих параметров, например температуру, загрузку процессора и прочие.

Как бонус кусок готовых скриптов, о которых я писал в начале, получения ip с имени хоста и добавления его в политику IPsec.

Плюс в том что работает в связке Mikrotik + мыльницы которые поддерживают ddns и ipsec (Dlink 804 на пример). Скрипт который достает из дднс имени удаленного пира IP адрес и вставляет его в нужную политику:

И скрипт который подставляет на удаленной стороне текущий ip в политику ipsec:

В этой статье рассмотрим подключение и взаимодействие с API Mikrotik с помощью библиотеки PEAR2_Net_RouterOS, написанной на PHP. Предварительная установка По умолчанию, на версиях RouterOS ниже 6.0, API выключено. Для того, чтобы включить API необходимо в консоли (терминале Mikrotik) выполнить следующую команду: где address – IP адрес, с которого будет разрешено подключение к микротику (в данном […]

В этой статье рассмотрим подключение и взаимодействие с API Mikrotik с помощью библиотеки PEAR2_Net_RouterOS, написанной на PHP.

Предварительная установка

По умолчанию, на версиях RouterOS ниже 6.0, API выключено. Для того, чтобы включить API необходимо в консоли (терминале Mikrotik) выполнить следующую команду:

где address – IP адрес, с которого будет разрешено подключение к микротику (в данном примере 192.168.170.157).

Если нужно включить API по умолчанию на все IP адреса, то необходимо выполнить следующую команду:

Кроме того, необходимо проверить, чтобы порт API не был закрыт фильтрами. Сделать это можно на вкладке: IP->Firewall->FilterRules.

Подключение библиотеки PEAR2_Net_RouterOS

Итак, будем производить подключение к API микротика с помощью библиотеки PEAR2_Net_RouterOS. Первым делом ей необходимо скачать. Вся библиотека, с документами и тестовыми скриптами доступна на GitHub по следующей ссылке: https://github.com/pear2/Net_RouterOS

Данный вид скачивания предоставит нам библиотеку в привычном архивном формате. Следующим шагом необходимо распаковать полученный архив в директорию с проектом PHP (в котором будем подключать библиотеку).

Подключение библиотеки phar-формата

Также данную библиотеку можно встретить в формате phar. Подключение её в таком виде производится несколько сложнее. К примеру, использование phar не всегда включено по умолчанию в конфигурационных файлах php.

Рассмотрим, как подключить поддержку файлов phar в php на примере CentOS 6.9. Для этого открываем в текстовом редакторе файл /etc/php.d/phar.ini:

В нём проверяем, что строка extension=phar.so не закомментирована.

Для подключения самой библиотеки в коде модуля PHP прописываем:

В случае если по каким-то причинам подключить библиотеку phar не удалось, можно её распаковать командой:

и воспользоваться инструкцией ниже.

Подключение обычным PHP-файлом

Если библиотека изначально была не в формате phar, то её можно подключить в качестве связки обычных PHP-файлов. Для этого в коде модуля PHP прописываем:

Теперь рассмотрим простейший пример подключения к API микротика.

Пример подключения

В данном разделе будет рассмотрен пример подключения более детально. Весь код примера будет доступен в разделе ниже.

Для рассмотрения примера подключения, создадим файл index.php. В него пропишем следующий код:

В данном случае подключение производится с помощью файла Autoload.php (метод 2), а не phar.

Коннект к API микротика производится в строке: new RouterOSClient(‘192.168.170.198’, ‘admin’, »), где, в качестве параметров, передаются IP адрес микротика, логин и пароль для подключения. Если подключение выполнено успешно, то в браузере увидим надпись «ОК». В противном случае, увидим ошибку.

Теперь, когда подключение к API микротика успешно установлено, выведем какой-нибудь полезный результат.

Получение и парсинг результатов

Работу с API рассмотрим на примере вывода текущего списка IP адресов (вкладка IP->Addresses).

Первое, что делаем – выполняем подключение к API микротика, которое описано в предыдущем пункте.

Далее выполняем запрос на получение списка IP адресов:

$request = new RouterOSRequest(‘/ip/address/print’);

В качестве параметра RouterOSRequest передаём команду, структура которой аналогична команде получения IP адресов в консоли микротика, за исключением одного: вместо пробелов при записи команды в консоли здесь используются «/».

Выполняется запрос командой

Запускаем цикл по всему массиву:

Проверяем, чтобы тип ответа был одним из зарезервированных:

И получаем необходимые значения:

Для получения параметра disabled воспользуемся тернарным оператором:

Выведем все переменные в удобочитаемом виде:

После чего закрываем if и цикл foreach.

Исходный код примера

Здесь приведём полный исходный код описанного выше примера:

На этом рассмотрение подключения к API Mikrotik средствами библиотеки PHP завершено.

mikrotik api php примеры. Смотреть фото mikrotik api php примеры. Смотреть картинку mikrotik api php примеры. Картинка про mikrotik api php примеры. Фото mikrotik api php примеры

Остались вопросы?

Я — Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *