Задать вопрос
  • MikroTik C# API ошибка авторизации?

    @timofeev_sergei281093 Автор вопроса
    Александр Ананьев, так так же используется =password=:
    this->write('/login', false);
                    $this->write('=name=' . $login, false);
                    $this->write('=password=' . $password);
  • MikroTik C# API ошибка авторизации?

    @timofeev_sergei281093 Автор вопроса
    Вот работающий метод класса на PHP
    public function connect($ip, $login, $password)
        {
            for ($ATTEMPT = 1; $ATTEMPT <= $this->attempts; $ATTEMPT++) {
                $this->connected = false;
                $PROTOCOL = ($this->ssl ? 'ssl://' : '' );
                $context = stream_context_create(array('ssl' => array('ciphers' => 'ADH:ALL', 'verify_peer' => false, 'verify_peer_name' => false)));
                $this->debug('Connection attempt #' . $ATTEMPT . ' to ' . $PROTOCOL . $ip . ':' . $this->port . '...');
                $this->socket = @stream_socket_client($PROTOCOL . $ip.':'. $this->port, $this->error_no, $this->error_str, $this->timeout, STREAM_CLIENT_CONNECT,$context);
                if ($this->socket) {
                    socket_set_timeout($this->socket, $this->timeout);
                    $this->write('/login', false);
                    $this->write('=name=' . $login, false);
                    $this->write('=password=' . $password);
                    $RESPONSE = $this->read(false);
                    if (isset($RESPONSE[0])) {
                        if ($RESPONSE[0] == '!done') {
                            if (!isset($RESPONSE[1])) {
                                // Login method post-v6.43
                                $this->connected = true;
                                break;
                            } else {
                                // Login method pre-v6.43
                                $MATCHES = array();
                                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=' . $login, false);
                                        $this->write('=response=00' . md5(chr(0) . $password . pack('H*', $MATCHES[0][1])));
                                        $RESPONSE = $this->read(false);
                                        if (isset($RESPONSE[0]) && $RESPONSE[0] == '!done') {
                                            $this->connected = true;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    fclose($this->socket);
                }
                sleep($this->delay);
            }
    
            if ($this->connected) {
                $this->debug('Connected...');
            } else {
                $this->debug('Error...');
            }
            return $this->connected;
        }
  • MikroTik C# API ошибка авторизации?

    @timofeev_sergei281093 Автор вопроса
    Александр Карабанов, Так же - готовый класс на PHP для API MirkoTik
  • MikroTik C# API ошибка авторизации?

    @timofeev_sergei281093 Автор вопроса
    insighter, Роутер ожидает простой авторизации хотя бы. Но роутер в логах пишет "login failure for user мой_юзер from мой_ip via api". Пароль хешируется готовым рабочим классом, который выложен на официальном сайте. Вставленный выше кусок кода - это как раз метод готового класса (https://wiki.mikrotik.com/wiki/API_in_C_Sharp ).