Денис Пестрецов
25.07.2019
608

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

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

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

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

Для работы с библиотекой необходимо наличие PHP версии 5.3.0, версии RouterOS на Mikrotik выше 3, включена поддержка API.

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

/ip service set numbers="api" address="192.168.170.157" disabled="no"
/ip service set numbers="api" address="192.168.170.157" disabled="no"

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

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

/ip service set numbers="api" disabled="no"
Включение API микротика

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

По умолчанию микротик для API использует порт 8728.
Фильтр микротика

Подключение библиотеки 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:

vim /etc/php.d/phar.ini

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

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

use PEAR2\Net\RouterOS;
require_once ‘PEAR2_Net_RouterOS-1.0.0b6.phar’;

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

phar extract -f PEAR2_Net_RouterOS-1.0.0b6.phar

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

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

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

use PEAR2\Net\RouterOS;
require_once 'PEAR2_Net_RouterOS-1.0.0b6/src/PEAR2/Autoload.php';

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

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

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

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

<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2_Net_RouterOS-1.0.0b6/src/PEAR2/Autoload.php';
try {
    $client = new RouterOS\Client('192.168.170.198', 'admin', '');
    echo 'OK';
} catch (Exception $e) {
    die($e);
}
?>

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

Важно, чтобы библиотека PEAR2_Net_RouterOS-1.0.0b6 находилась в той же директории, что и файл index.php.

Коннект к 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 адресов в консоли микротика, за исключением одного: вместо пробелов при записи команды в консоли здесь используются «/».

Передача дополнительных параметров запроса производится командой $request-> setArgument(‘parameter’, ’value’).

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

$responses = $client->sendSync($request);

Теперь, в переменной $responses хранится массив, содержащий в себе список IP адресов. Осталось распарсить его и привести к читабельному виду.

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

foreach ($responses as $response) {

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

if ($response->getType() === RouterOS\Response::TYPE_DATA) {

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

$address = $response->getProperty('address');
$network = $response->getProperty('network');
$interface = $response->getProperty('interface');

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

$disabled = ($response->getProperty('disabled') === true) ? "Выключено" : "Включено";

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

echo "<pre>Адрес: ".$address."; Сеть: ". $network. "; Интерфейс: ". $interface. "; Статус: ".$disabled."\n</pre>";

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

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

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

<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2_Net_RouterOS-1.0.0b6/src/PEAR2/Autoload.php';
try {
    $client = new RouterOS\Client('192.168.170.198', 'admin', '');
} catch (Exception $e) {
    die($e);
}
$request = new RouterOS\Request('/ip/address/print');
$responses = $client->sendSync($request);
foreach ($responses as $response) {
	if ($response->getType() === RouterOS\Response::TYPE_DATA) {
		$address = $response->getProperty('address');
		$network = $response->getProperty('network');
		$interface = $response->getProperty('interface');
		$disabled = ($response->getProperty('disabled') === true) ? "Выключено" : "Включено";	
		echo "<pre>Адрес: ".$address."; Сеть: ". $network. "; Интерфейс: ". $interface. "; Статус: ".$disabled."\n</pre>";
	}	
}
?>
Результат работы примера

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

 
avatar
  Подписаться  
Уведомление о

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

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

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices