public void TestQuit() { using (var con = new MikroTikConnection()) { con.Connect(Login, Password, Address, Port); bool success = con.Quit(2000); Assert.True(success); } }
///// <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); } } }
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); }