rliskov 26 Опубликовано: 2019-07-06 20:57:42 Share Опубликовано: 2019-07-06 20:57:42 Обновил микротик до версии 6.45.1 и теперь биллинг не может авторизоваться по api на микротике. В описании релиза 6.45.1 написано: Старый метод аутентификации API также больше не будет работать. Документацию для новой процедуры входа в систему смотрите в официальной Вики Микротик: https://wiki.mikrotik.com/wiki/Manual:API#Initial_login. Подскажите что нужно подправить в убиллинге, чтоб он работал с микротиком версии 6.45.1 Ссылка на сообщение Поделиться на других сайтах
l1ght 377 Опубліковано: 2019-07-06 21:56:55 Share Опубліковано: 2019-07-06 21:56:55 ченждог почитать не? ещё с 0.9.2 сделано или хотя бы попытаться почитать опции в алтер.ини я уже молчу про саму доку по микротикам http://wiki.ubilling.net.ua/doku.php?id=mikrotikapi 1 Ссылка на сообщение Поделиться на других сайтах
Vsevolod 0 Опубліковано: 2019-10-19 10:38:40 Share Опубліковано: 2019-10-19 10:38:40 Подскажите , пожалуйста, после обновления микротика до 6.45.6 перестал автаризовываться старгейзер, в самом убиллинге все отлично - в разделе Сервера доступа (NAS) показываются расширенные настройки микротика и подтягиваются все данные. А вот сам старгейзер: 2019-10-19 13:33:28 - [Ubilling] - OnConnect started for user `1558511444`: 2019-10-19 13:33:32 - [Executer] - Error: Cannot establish connection with MikroTik! 2019-10-19 13:33:32 - [Ubilling] - QC: 2, elapsed time: 3.281 sec. в скрипте /api/libs/api.routeros.php вижу новый метод обращения по API: if ($UseNewConnMode) { $this->write('/login', false); $this->write('=name=' . $username, false); $this->write('=password=' . $password); $response = $this->read(false); if ($response[0] == '!done') { $this->connected = true; break; } } else { $this->write('/login'); $response = $this->read(false); if (isset($response[0]) && $response[0] == '!done') { if (preg_match_all('/[^=]+/i', $response[1], $matches)) { if ($matches[0][0] == 'ret' && strlen($matches[0][1]) == 32) { $this->write('/login', false); $this->write('=name=' . $username, false); $this->write('=response=00' . md5(chr(0) . $password . pack('H*', $matches[0][1]))); $response = $this->read(false); if ($response[0] == '!done') { $this->connected = true; break; } } } } } в скрипте самого executer-а старый метод: private function connect() { for ($ATTEMPT = 1; $ATTEMPT <= $this->config['attempts']; $ATTEMPT++) { $this->connected = FALSE; $this->log->message(__CLASS__, 'Connection attempt #' . $ATTEMPT . ' to ' . $this->parameters['ip'] . ':' . $this->config['api_port'] . '...', "api"); if ( $this->socket = @fsockopen($this->parameters['ip'], $this->config['api_port'], $this->error_no, $this->error_str, $this->config['timeout']) ) { socket_set_timeout($this->socket, $this->config['timeout']); $this->write('/login'); $RESPONSE = $this->read(FALSE); if ( $RESPONSE[0] == '!done' ) { if ( preg_match_all('/[^=]+/i', $RESPONSE[1], $MATCHES) ) { if ( $MATCHES[0][0] == 'ret' && strlen($MATCHES[0][1]) == 32 ) { $this->write('/login', FALSE); $this->write('=name=' . $this->options['username'], FALSE); $this->write('=response=00' . md5(chr(0) . $this->options['password'] . pack('H*', $MATCHES[0][1]))); $RESPONSE = $this->read(FALSE); if ( $RESPONSE[0] == '!done' ) { $this->connected = TRUE; break; } } } } Переделываю точб-в точь как в /api/libs/api.routeros.php и глухо. Подскажите что сделать нужно еще или может кто-то использует уже старгейзер с новым методом API для микротика - покажите вашу функцию connect в старгейзере. Ссылка на сообщение Поделиться на других сайтах
Vsevolod 0 Опубліковано: 2019-10-19 14:09:11 Share Опубліковано: 2019-10-19 14:09:11 3 часа назад, Vsevolod сказал: Подскажите , пожалуйста, после обновления микротика до 6.45.6 перестал автаризовываться старгейзер, в самом убиллинге все отлично - в разделе Сервера доступа (NAS) показываются расширенные настройки микротика и подтягиваются все данные. А вот сам старгейзер: 2019-10-19 13:33:28 - [Ubilling] - OnConnect started for user `1558511444`: 2019-10-19 13:33:32 - [Executer] - Error: Cannot establish connection with MikroTik! 2019-10-19 13:33:32 - [Ubilling] - QC: 2, elapsed time: 3.281 sec. в скрипте /api/libs/api.routeros.php вижу новый метод обращения по API: if ($UseNewConnMode) { $this->write('/login', false); $this->write('=name=' . $username, false); $this->write('=password=' . $password); $response = $this->read(false); if ($response[0] == '!done') { $this->connected = true; break; } } else { $this->write('/login'); $response = $this->read(false); if (isset($response[0]) && $response[0] == '!done') { if (preg_match_all('/[^=]+/i', $response[1], $matches)) { if ($matches[0][0] == 'ret' && strlen($matches[0][1]) == 32) { $this->write('/login', false); $this->write('=name=' . $username, false); $this->write('=response=00' . md5(chr(0) . $password . pack('H*', $matches[0][1]))); $response = $this->read(false); if ($response[0] == '!done') { $this->connected = true; break; } } } } } в скрипте самого executer-а старый метод: private function connect() { for ($ATTEMPT = 1; $ATTEMPT <= $this->config['attempts']; $ATTEMPT++) { $this->connected = FALSE; $this->log->message(__CLASS__, 'Connection attempt #' . $ATTEMPT . ' to ' . $this->parameters['ip'] . ':' . $this->config['api_port'] . '...', "api"); if ( $this->socket = @fsockopen($this->parameters['ip'], $this->config['api_port'], $this->error_no, $this->error_str, $this->config['timeout']) ) { socket_set_timeout($this->socket, $this->config['timeout']); $this->write('/login'); $RESPONSE = $this->read(FALSE); if ( $RESPONSE[0] == '!done' ) { if ( preg_match_all('/[^=]+/i', $RESPONSE[1], $MATCHES) ) { if ( $MATCHES[0][0] == 'ret' && strlen($MATCHES[0][1]) == 32 ) { $this->write('/login', FALSE); $this->write('=name=' . $this->options['username'], FALSE); $this->write('=response=00' . md5(chr(0) . $this->options['password'] . pack('H*', $MATCHES[0][1]))); $RESPONSE = $this->read(FALSE); if ( $RESPONSE[0] == '!done' ) { $this->connected = TRUE; break; } } } } Переделываю точб-в точь как в /api/libs/api.routeros.php и глухо. Подскажите что сделать нужно еще или может кто-то использует уже старгейзер с новым методом API для микротика - покажите вашу функцию connect в старгейзере. Разобрался, перенес скипты и папки docs в старгейзер. Просто реально этого нигде в документации не нашел. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас