Подключение к API Mikrotik средствами библиотеки PHP
В этой статье рассмотрим подключение и взаимодействие с 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) выполнить следующую команду:
/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 не был закрыт фильтрами. Сделать это можно на вкладке: 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:
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.
Коннект к 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 адресов в консоли микротика, за исключением одного: вместо пробелов при записи команды в консоли здесь используются «/».
Выполняется запрос командой
$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 завершено.
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.