예제 #1
0
 public void TestQuit()
 {
     using (var con = new MikroTikConnection())
     {
         con.Connect(Login, Password, Address, Port);
         bool success = con.Quit(2000);
         Assert.True(success);
     }
 }
예제 #2
0
        ///// <summary>
        ///// Находит адрес в тойже подсети.
        ///// </summary>
        //private IPAddress GetLocalIPAddress()
        //{
        //    var mask24 = IPAddress.Parse("255.255.255.0");

        //    var host = Dns.GetHostEntry(Dns.GetHostName());
        //    foreach (IPAddress ip in host.AddressList)
        //    {
        //        if (ip.AddressFamily == AddressFamily.InterNetwork)
        //        {
        //            if (ip.IsInSameSubnet(Config.MikroTikAddress, mask24))
        //                return ip;
        //        }
        //    }
        //    Log.Error($"Не найден сетевой интерфейс в подсети {Config.MikroTikAddress.GetNetworkAddress(mask24)}/24.");
        //    throw new LetsEncryptMikroTikException($"Не найден сетевой интерфейс в подсети {Config.MikroTikAddress.GetNetworkAddress(mask24)}/24.");
        //}

        /// <summary>
        ///
        /// </summary>
        /// <exception cref="LetsEncryptMikroTikException"/>
        private async Task MainAsync()
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            /* Русская кодировка */
            var encoding = Encoding.GetEncoding("windows-1251");

            Log.Information("Подключение к микротику.");
            using (var con = new MikroTikConnection(encoding))
            {
                try
                {
                    //if (Config.UseSsl)
                    {
                        //con.ConnectSsl(Config.MikroTikAddress, Config.MikroTikPort, Config.MikroTikLogin, Config.MikroTikPassword);
                    }
                    //else
                    {
                        con.Connect(Config.MikroTikAddress, Config.MikroTikPort, Config.MikroTikLogin, Config.MikroTikPassword);
                    }
                }
                catch (MikroTikTrapException ex) when(ex.Message == "std failure: not allowed (9)")
                {
                    string message = $"Не удалось авторизоваться пользователю '{Config.MikroTikLogin}'. Проверьте права пользователя на доступ к api.";

                    Log.Error(message);
                    throw new LetsEncryptMikroTikException(message, ex);
                }
                catch (Exception ex)
                {
                    throw new LetsEncryptMikroTikException("Не удалось подключиться к микротику", ex);
                }

                try
                {
                    await UpdateCertificateAsync(con).ConfigureAwait(false);
                }
                catch (MikroTikTrapException ex) when(ex.Message == "not enough permissions (9)")
                {
                    string message = $"У пользователя '{Config.MikroTikLogin}' недостаточно прав в микротике. Требуются права: api, read, write, ftp.";

                    Log.Error(message);
                    throw new LetsEncryptMikroTikException(message, ex);
                }
                finally
                {
                    Log.Information("Отключение от микротика.");
                    con.Quit(2000);
                }
            }
        }
예제 #3
0
        private static async Task Main()
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            // Support localized comments.
            MikroTikConnection.DefaultEncoding = Encoding.GetEncoding("windows-1251"); // RUS

            using (var con = new MikroTikConnection(Encoding.GetEncoding("windows-1251")))
            {
                con.Connect("api_dbg", "debug_password", "10.0.0.1");

                var leases = con.Command("/ip dhcp-server lease print")
                             .Query("disabled", "false") // filter
                             .Proplist("address", "mac-address", "host-name", "status")
                             .Send();

                con.Quit(1000);
            }

            //// Отправляет запрос без получения результата.
            //var listener = con.Command("/ping")
            //    .Attribute("address", "SERV.LAN")
            //    .Attribute("interval", "1")
            //    .Attribute("count", "4")
            //    .Proplist("time")
            //    .Listen();

            //// сервер будет присылать результат каждую секунду.
            //while (!listener.IsComplete)
            //{
            //    MikroTikResponseFrame result;
            //    try
            //    {
            //        result = listener.ListenNext();
            //    }
            //    catch (MikroTikDoneException)
            //    {

            //        break;
            //    }

            //    Console.WriteLine(result);

            //    listener.Cancel(true);
            //}

            //var logListener = con.Command("/log listen")
            //    .Listen();

            //while (!logListener.IsComplete)
            //{
            //    try
            //    {
            //        logListener.ListenNext();
            //    }
            //    catch (TimeoutException)
            //    {

            //    }

            //    var entry = logListener.ListenNext();
            //    Console.WriteLine(entry);
            //}

            //// Вытащить активные сессии юзера.
            //var activeSessionsResult = con.Command("/ip hotspot active print")
            //    .Proplist(".id")
            //    .Query("user", "2515")
            //    .Send();

            //string[] activeSessions = activeSessionsResult.ScalarArray(".id");
            //Thread.Sleep(-1);



            //resultPrint.Scalar("");
            //resultPrint.ScalarList();
            //resultPrint.ScalarOrDefault();

            //var sw = Stopwatch.StartNew();
            //for (int i = 0; i < 500_000; i++)
            //{
            //    resultPrint.ToArray(new { });
            //    resultPrint.ScalarList<int>();
            //    var row = resultPrint.ToList<InterfaceDto>();

            //}
            //sw.Stop();
            //Trace.WriteLine(sw.Elapsed);
            //Console.WriteLine("OK");
            //Thread.Sleep(-1);

            // Команда выполняется 20 сек.
            //var task = con.Command("/delay")
            //    .Attribute("delay-time", "20")
            //    .Send();

            // Tell router we are done.
            //con.Quit(1000);
        }