Перейти до

Mikrotik v. 6.45.1 авторизация по API


Рекомендованные сообщения

Обновил микротик до версии 6.45.1 и теперь биллинг не может авторизоваться по api на микротике. В описании релиза 6.45.1 написано:

Старый метод аутентификации API также больше не будет работать. Документацию для новой процедуры входа в систему смотрите в официальной Вики Микротик: https://wiki.mikrotik.com/wiki/Manual:API#Initial_login.

Подскажите что нужно подправить в убиллинге, чтоб он работал с микротиком версии 6.45.1

 

Ссылка на сообщение
Поделиться на других сайтах

ченждог почитать не?

ещё с 0.9.2 сделано

image.thumb.png.f0c665a7515fb29e6e54e8da903a16b8.png

или хотя бы попытаться почитать опции в алтер.ини 

я уже молчу про саму доку по микротикам

http://wiki.ubilling.net.ua/doku.php?id=mikrotikapi

  • Like 1
Ссылка на сообщение
Поделиться на других сайтах
  • 3 months later...

Подскажите , пожалуйста, после обновления микротика до 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 в старгейзере.

Ссылка на сообщение
Поделиться на других сайтах
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 в старгейзер. Просто реально этого нигде в документации не нашел.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...