Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Интерфейс распечатки PHP API

    Интерфейс распечатки PHP API

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Интерфейс распечатки PHP API, RouterOS
     
    penwelldlamini
    Guest
    #1
    0
    10.01.2017 14:51:00
    Как вывести все имена интерфейсов в таблицу через API с помощью PHP? Кто-нибудь, пожалуйста, поделитесь скриптом.
     
     
     
    mysz0n
    Guest
    #2
    0
    21.09.2017 15:04:00
    @boen_robot, не мог бы ты сказать, что я делаю не так с твоим API? Этот код работает нормально:  
    $trequest2 = new RouterOS\Request('/interface monitor-traffic interface=wlan1 once');  
    $rx = $client->sendSync($trequest2)->getProperty('rx-bits-per-second');  
    $tx = $client->sendSync($trequest2)->getProperty("tx-bits-per-second");  
    echo $rx;  
    echo $tx;  

    Но этот код вообще ничего не выводит:  
    $trequest2 = new RouterOS\Request('/interface ethernet monitor ether1 once');  
    $status = $client->sendSync($trequest2)->getProperty('status');  
    $rate = $client->sendSync($trequest2)->getProperty("rate");  
    $auto_neg = $client->sendSync($trequest2)->getProperty("auto-negotiation");  
    echo 'status: ' . $status;  
    echo 'rate: ' . $rate;  
    echo 'auto_neg: ' . $auto_neg;  

    Кстати, возможно ли получить значение LINK DOWN через ваше API?
     
     
     
    boen_robot
    Guest
    #3
    0
    21.09.2017 16:12:00
    Команды в конструкторе запроса должны иметь имена аргументов. Неименованные аргументы не поддерживаются протоколом API. Команда “/interface ethernet monitor” в частности содержит имя интерфейса в неименованном аргументе под названием “numbers” (как и многие другие команды, кстати). Вы можете сами это проверить, набрав “?” после команды в терминале.

    Кстати, каждый вызов sendSync() — это новый запрос к роутеру. Гораздо эффективнее сделать один вызов и потом проанализировать результаты. Например:

    $trequest2 = new RouterOS\Request('/interface monitor-traffic interface=wlan1 once');  
    $trequest2result = $client->sendSync($trequest2);  
    $rx = $trequest2result->getProperty('rx-bits-per-second');  
    $tx = $trequest2result->getProperty("tx-bits-per-second");  
    echo $rx;  
    echo $tx;

    Или (также решая ваш вопрос с “numbers”):

    $trequest2 = new RouterOS\Request('/interface ethernet monitor numbers=ether1 once');  
    $trequest2result = $client->sendSync($trequest2);  
    $status = $trequest2result->getProperty('status');  
    $rate = $trequest2result->getProperty("rate");  
    $auto_neg = $trequest2result->getProperty("auto-negotiation");  
    echo 'status: '. $status;  
    echo 'rate: '. $rate;  
    echo 'auto_neg: '. $auto_neg;

    Да, аналогично тому, как вы бы получили эти данные через CLI, в меню “/interface”.  

    Для ещё более "нативного" подхода, чем с классом Client, можно использовать класс Util, например:  

    $util = new RouterOS\Util($client);  
    $linkDowns = $util->setMenu('/interface')->get('ether1', 'link-downs');  
    echo 'Link downs: ' . $linkDowns;

    Что примерно соответствует CLI:  

    :local linkDowns [/interface get ether1 link-downs];
    :put ("Link downs: " . $linkDowns);
     
     
     
    mysz0n
    Guest
    #4
    0
    13.12.2017 19:19:00
    Привет, boen_robot, у меня есть вопрос по твоему API (которое просто супер). Я успешно использую твое API на сервере IIS. Сейчас запустил новый сервер на XAMPP. Всё работает нормально, кроме соединений через api-ssl (обычный api работает без проблем). В момент подключения

    $client = new RouterOS\Client(192.168.88.22, 'admin', "password", null, false, null, NetworkStream::CRYPTO_TLS));

    я получаю ошибку:

    исключение 'PEAR2\Net\Transmitter\SocketException' с сообщением 'stream_socket_client(): Не удалось получить сертификат пира' в phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/Transmitter/TcpClient.php:205  
    Стек вызовов:  
    #0 phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/Transmitter/Stream.php(130): PEAR2\Net\Transmitter\TcpClient->createException('stream_socket_c...', 0)  
    #1 [internal function]: PEAR2\Net\Transmitter\Stream->handleError(2, 'stream_socket_c...', 'phar://C:/xampp...', 147, Array)
    #2 phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/Transmitter/TcpClient.php(147): stream_socket_client('tls://192.168.88.22...', 0, '', '60', 4, Resource id #15)  
    #3 phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/RouterOS/Communicator.php(148): PEAR2\Net\Transmitter\TcpClient->__construct('192.168.88.22', 8729, false, NULL, 'admin/pass', 'TLS', Resource id #15)  
    #4 phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/RouterOS/Client.php(146): PEAR2\Net\RouterOS\Communicator->__construct('192.168.88.22', NULL, false, NULL, 'admin/pass', 'TLS', NULL)  
    #5 C:\xampp\htdocs\beam\new\ssl.php(50): PEAR2\Net\RouterOS\Client->__construct('192.168.88.22', 'admin', 'pass', NULL, false, NULL, 'TLS')  
    #6 {main}

    Следующее исключение 'PEAR2\Net\Transmitter\SocketException' с сообщением 'Не удалось инициализировать сокет.' в phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/Transmitter/TcpClient.php:205  
    Стек вызовов:  
    #0 phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/Transmitter/TcpClient.php(157): PEAR2\Net\Transmitter\TcpClient->createException('Failed to initi...', 7, Object(PEAR2\Net\Transmitter\SocketException))  
    #1 phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/RouterOS/Communicator.php(148): PEAR2\Net\Transmitter\TcpClient->__construct('192.168.88.22', 8729, false, NULL, 'admin/pass', 'TLS', Resource id #15)  
    #2 phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/RouterOS/Client.php(146): PEAR2\Net\RouterOS\Communicator->__construct('192.168.88.22', NULL, false, NULL, 'admin/pass', 'TLS', NULL)  
    #3 C:\xampp\htdocs\beam\new\ssl.php(50): PEAR2\Net\RouterOS\Client->__construct('192.168.88.22', 'admin', 'pass', NULL, false, NULL, 'TLS')  
    #4 {main}

    Следующее исключение 'PEAR2\Net\RouterOS\SocketException' с сообщением 'Ошибка подключения к RouterOS' в phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/RouterOS/Communicator.php:150  
    Стек вызовов:  
    #0 phar://C:/xampp/htdocs/PEAR2_Net_RouterOS-1.0.0b5.phar/PEAR2_Net_RouterOS-1.0.0b5/src/PEAR2/Net/RouterOS/Client.php(146): PEAR2\Net\RouterOS\Communicator->__construct('192.168.88.22', NULL, false, NULL, 'admin/pass', 'TLS', NULL)  
    #1 C:\xampp\htdocs\beam\new\ssl.php(50): PEAR2\Net\RouterOS\Client->__construct('192.168.88.22', 'admin', 'pass', NULL, false, NULL, 'TLS')  
    #2 {main}

    Есть идея, в чем может быть проблема и что нужно поменять на сервере или в php.ini? Я включил библиотеку php_openssl.dll.
     
     
     
    LEA
    Guest
    #5
    0
    14.12.2017 03:33:00
    Привет! Ты создавал сертификат для api-ssl с последующим привязанием к IP-сервисам? Если да, тогда проверь, на каком порту должно быть соединение между php-скриптом и сервером. По умолчанию api-ssl использует порт 8729, а для обычного (небезопасного) соединения api — порт 8728. Тоже не забудь проверить настройки фаервола на Windows-сервере, где стоит XAMPP. В фаерволе нужно открыть порт 8729.
     
     
     
    mysz0n
    Guest
    #6
    0
    14.12.2017 09:18:00
    Брандмауэр на сервере выключен, что интересно — в логах я вижу, что сервер XAMPP пытается подключиться к роутеру 10:02:25 firewall,info input: in:ether1 out:(none), src-mac 02:ab:cd:ef:6b:a9, proto TCP (SYN), 192.168.88.6:56682->192.168.88.22:8729, len 52. Я могу подключиться к роутеру с IIS-сервера, так что исключаю проблему с его брандмауэром, кажется, что проблема на стороне XAMPP-сервера, или нужно что-то изменить в php.ini или где-то еще. В конечном итоге я планирую посылать запросы с XAMPP на IIS, чтобы IIS подключался через API-SSL и возвращал результаты на XAMPP, но предпочел бы сделать всё это непосредственно на XAMPP-сервере.
     
     
     
    boen_robot
    Guest
    #7
    0
    14.12.2017 12:39:00
    Странно… Я думал, что специально сделал так, чтобы ADH был установлен по умолчанию, если не задан контекст… С другой стороны, я не особо тестировал SSL из-за проблем с PHP, так что это может быть связано с конкретной версией… Вы можете вручную добавить контекст со всеми нужными опциями. Для ADH (то есть без сертификата) нужно использовать:

    $client = new RouterOS\Client('192.168.88.22', 'admin', 'password', null, false, null, NetworkStream::CRYPTO_TLS,
       stream_context_create(array('ssl' => array(
           'verify_peer' => false,
           'verify_peer_name' => false,
           'ciphers' => 'ADH'
       )))
    );

    В любом случае, из-за упомянутых проблем с PHP, если нужен зашифрованный канал, лучше настроить OpenVPN между клиентом и роутером и уже поверх VPN делать незашифрованное подключение.
     
     
     
    mysz0n
    Guest
    #8
    0
    14.12.2017 13:38:00
    Еще раз спасибо, boen_robot. Перед тем как задать вопрос, я пробовал так:

    $context = stream_context_create(
       array(
           'ssl' => array(
               'verify_peer' => true
             )
       )
    );

    но безуспешно. Зато этот код работает нормально:

    $context = stream_context_create(array('ssl' => array(
           'verify_peer' => false,
           'verify_peer_name' => false,
           'ciphers' => 'ADH'
       ))
    );

    Раз уж вы меня слушаете, у меня есть еще один вопрос: я подключаю клиентов SXT через api-ssl и хочу поменять PPPoE-аккаунт. Аккаунт меняется, но меняется и IP-адрес, из-за чего скрипт начинает зависать. После таймаута страница отображается. Можно ли не ждать ответа, а просто отправить новые настройки и сразу отключиться?

    Второй вариант — отправлять через планировщик задачу, которая будет менять данные PPPoE-аккаунта, API отключится, а через несколько секунд планировщик поменяет аккаунт.
     
     
     
    LEA
    Guest
    #9
    0
    14.12.2017 14:13:00
    Просмотрите файл журнала XAMPP после запуска вашего PHP-скрипта. Если возникнут проблемы с PHP или Apache, вы увидите соответствующие ошибки.
     
     
     
    boen_robot
    Guest
    #10
    0
    14.12.2017 18:09:00
    Ты имеешь в виду, что меняешь сам IP, к которому подключаешься? Если да, то единственный подходящий вариант — добавить таймер с автоудалением, который выполнит эту смену.
     
     
     
    mysz0n
    Guest
    #11
    0
    20.04.2018 21:08:00
    boen_robot, быстрый вопрос: как это сделать в вашем API: /tool bandwidth-server set enabled=yes? Я пробовал разные способы, но ничего не срабатывает.
     
     
     
    boen_robot
    Guest
    #12
    0
    21.04.2018 20:10:00
    <?php
    use PEAR2\Net\RouterOS;
    require_once 'PEAR2_Net_RouterOS-1.0.0b6.phar';

    $util = new RouterOS\Util($client = new RouterOS\Client('192.168.88.1', 'admin', 'password'));
    $util->setMenu('/tool bandwidth-server')->set(null, array('enabled' => 'true')); Для булевых полей в протоколе API используются строки «true» и «false», а не «yes» и «no», как в CLI.
     
     
     
    mysz0n
    Guest
    #13
    0
    22.04.2018 09:29:00
    boen_robot: Большое спасибо за вашу поддержку!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры