Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • 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
    Проблема входа в API на RB133

    Проблема входа в API на RB133

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Проблема входа в API на RB133, RouterOS
     
    cieplik206
    Guest
    #1
    0
    16.03.2009 13:45:00
    Привет, я тестирую API, чтобы понять, как его использовать в продуктивных сетях. Я нашел один случай, который, похоже, является ошибкой. Я использую класс API на PHP из WIKI (слегка модифицированный под мои нужды). Вот что я получаю от RB133: Подключение к MT 192.168.1.100 Попытка подключения #1 к 192.168.1.100:8728... <<< [6] /login >>> [5/5 байт прочитано. >>> [5, 0] !done Попытка подключения #2 к 192.168.1.100:8728... <<< [6] /login >>> [5/5 байт прочитано. >>> [5, 0] !done Попытка подключения #3 к 192.168.1.100:8728... <<< [6] /login >>> [5/5 байт прочитано. >>> [5, 0] !done Попытка подключения #4 к 192.168.1.100:8728... <<< [6] /login >>> [5/5 байт прочитано. >>> [5, 0] !done Попытка подключения #5 к 192.168.1.100:8728... <<< [6] /login >>> [5/5 байт прочитано. >>> [5, 0] !done Ошибка... Куда пропало сообщение RET?? Чтобы убедиться, я использовал анализатор пакетов, чтобы проверить, не проблема ли в моем классе, но нет... Routerboard не отправляет обратно сообщения RET!!! РЕДАКТИРОВАТЬ Alix, ПК RB433 и 411 работают нормально, все платформы протестированы с версией 3.20.
     
     
     
    UGP2
    Guest
    #2
    0
    02.07.2011 12:17:00
    У меня такая проблема, но сон не помогает! Попытка подключения #1 к x.x.x.x:a8728… Попытка подключения #2 к x.x.x.x:8728… Попытка подключения #3 к x.x.x.x:8728… Попытка подключения #4 к x.x.x.x:8728… Попытка подключения #5 к x.x.x.x:8728… Ошибка… На локальном компьютере моя программа работает отлично, но на любом онлайн веб-сервере не работает!!!
     
     
     
    janisk
    Guest
    #3
    0
    05.07.2011 06:00:00
    проверь, включена ли служба API в разделе /ip services.
     
     
     
    mxmxmxmxmx
    Guest
    #4
    0
    03.08.2012 01:21:00
    Извини за копание в теме, но я потратил несколько часов на эту проблему! Могу подтвердить, что проблема существует. Я использовал Wireshark и анализатор пакетов, чтобы найти источник проблемы. если ($this->socket = @fsockopen($ip, $this->port, $this->error_no, $this->error_str, $this->timeout)) {
                   socket_set_timeout($this->socket, $this->timeout);
                   $this->write('/login');
                   $RESPONSE = $this->read(false);  // когда !done и =ret=... приходят в одном пакете, все в порядке
    но когда =ret= приходит в другом пакете, чем !done, у нас $STATUS['unread_bytes'] равен НУЛЮ после завершения считывания, и цикл соединения прерывается. Для меня достаточно подождать несколько миллисекунд после записи, перед чтением, чтобы решить проблему
      если ($RESPONSE[0] == '!done') {
                       если (preg_match_all('/[^=]+/i', $RESPONSE[1], $MATCHES)) {
    [...]
     
     
     
    janisk
    Guest
    #5
    0
    03.08.2012 09:30:00
    что происходит, когда в списке много =ret=? (список достаточно большой, чтобы не уместиться в один пакет?) и какую версию RouterOS вы используете? Также, вы видите это только на упомянутом маршрутизаторе? Если возможно, попробуйте последнюю версию RouterOS.
     
     
     
    janisk
    Guest
    #6
    0
    06.08.2012 07:01:00
    На сколько я могу судить, Java как-то справляется с этим, или я не сталкивался с ситуацией, когда код на Java не работал из-за фрагментации ответа. Однако в C/C++ мне приходилось считывать данные в цикле, пока я не прочитаю всю длину ответа, и использовать неблокирующие сокеты.
     
     
     
    mxmxmxmxmx
    Guest
    #7
    0
    03.08.2012 10:27:00
    5.19 RB433AH и RB600A. Я думаю, что разделение данных на 2 пакета не связано с размером данных, а вызвано временем генерации =ret=. В jpg есть неудачные попытки входа в пакеты 1-14 и успешный вход во все пакеты ниже. Когда я ждал 10 мс после записи, прежде чем читать, я пытался войти 100 раз, и все было успешно... много ret...? Я заметил эту проблему только при входе.
     
     
     
    boen_robot
    Guest
    #8
    0
    03.08.2012 18:44:00
    Какую версию PHP вы используете? Известно, что версии PHP до 5.3.4 могут работать нестабильно с фрагментацией небольших и/или несвоевременных данных сокетов. Обратите внимание, что даже современные версии фрагментируют большие и/или чрезмерно несвоевременные данные, и класс API PHP не был разработан с этим в виду. Попробуйте мою реализацию, которая заботится о сборке всех фрагментов (независимо от того, как PHP решит их фрагментировать). Однако она требует как минимум PHP 5.3.0.
     
     
     
    mxmxmxmxmx
    Guest
    #9
    0
    03.08.2012 21:36:00
    PHP версия 5.3.3-7+squeeze13
     
     
     
    boen_robot
    Guest
    #10
    0
    03.08.2012 22:11:00
    Предполагая, что squeeze13 — это ваша операционная система и версия (кодовое имя релиза Debian по данным Википедии)… что вы имеете в виду под “5.3.3-7”? Вы пробовали с 5.3.3 и 5.3.7, со всеми релизами между 5.3.3 и 5.3.7, или это какая-то сборка 5.3.3 (которая является 7-й в какой-то серии)? В любом случае, моя реализация должна работать с этой настройкой. Попробуйте, пожалуйста.
     
     
     
    mxmxmxmxmx
    Guest
    #11
    0
    03.08.2012 22:37:00
    я скопировал это из функции phpinfo()
     
     
     
    dsobin
    Guest
    #12
    0
    04.08.2012 04:36:00
    У меня такая же проблема с периодическими сбоями при входе. Ошибка возникает примерно раз из десяти. RB433L, ROS 5.19. Использую C-клиент из вики. Скомпилированный бинарный файл работает на одноименной одноплатной системе с linux, напрямую подключенной через короткий кабель CAT5 к ether1 на RB433L. Честно говоря, я внес изменения в вызывающую процедуру в вики, чтобы скомпилировать статический список команд. Если бы я был на месте Mikrotik, я бы тоже попросил меня использовать неизменённый C-клиент. Я сделаю это завтра. Также попробую установить задержку в 2 секунды между записью и чтением. Может быть, возьму Wireshark и посмотрю, есть ли проблемы с пакетными границами. Буду рад любым другим предложениям.
     
     
     
    boen_robot
    Guest
    #13
    0
    04.08.2012 11:39:00
    Что касается C, то существует проблема с бинарной безопасностью, которая до сих пор не решена в текущем коде вики. Подробности можно найти в этой теме, а также возможное (не совсем элегантное, но все же работающее) решение. Также стоит отметить, что код на C не учитывает фрагментированные или неполные данные. На самом деле, быстрая проверка всех клиентов показывает, что, кроме моего клиента, Python (как 2, так и 3; это объясняет, почему яниск предложил его раньше), C-Winsock, C++, NodeJS, Perl и .NET клиенты с этим справляются (клиенты .NET делают это очень неэффективно - по байту, вместо чанк и, тем не менее…). Другие реализации (кроме C клиента, я проверил клиентов Ruby, Java, ActionScript и Delphi) предполагают, что передача N байт функции сокета означает, что вы получите N байт, что далеко от истины.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры