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

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

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

Подключение к API Mikrotik

В этой статье рассмотрим подключение и взаимодействие с 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 завершено.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

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

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

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

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

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

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.