Я только что опубликовал свой API-клиент для .NET. Он реализует выполнение параллельных запросов, которые легко обрабатываются благодаря интерфейсу, похожему на ADO.NET, и расширениям с O/R маппером для поддержки строго типизированного опыта (поддерживает как одиночные сущности, так и списки сущностей). Пожалуйста, оставляйте сообщения в этой теме, если вам нужна реализация какой-то функции или есть вопросы.
Функции: - ITikConnection низкоуровневый API (отправка команд / чтение ответов, асинхронные команды) - API, похожий на ADO.NET (ITikCommand + различные методы Execute…) - O/R маппер для сущностей (connection.LoadList()) - В релизе есть генераторы C# кода для частичной автоматизации генерации кастомных сущностей из работающего роутера Mikrotik и официальной документации Mikrotik wiki - API-SSL поддержка - Поддержка нового процесса логина Mikrotik (начиная с версии 6.43) - Скомпилированные dll для .NET 3.5, 4.0, 4.5.x, 4.6.x, netcoreapp1.1, netcoreapp2.0, netstandard1.3, netstandard1.4, netstandard1.6 - Работает с Xamarin и другими .NET рантаймами на базе Mono - Загружайте dll только если вы не можете использовать NuGet пакет или исходники с GitHub
Примеры:
Для примеров чтения/записи смотрите страницу с wiki по сравнению API и примерами CRUD.
var logs = connection.LoadList<Log>(); foreach (Log log in logs) { Console.WriteLine("{0}[{1}]: {2}", log.Time, log.Topics, log.Message); }
Управление firewall:
// найти первое правило firewall var firstFirewallRule = connection.LoadAll<FirewallFilter>().First();
// создать новое правило firewall и поставить его первым в списке var firewallFilter = new FirewallFilter() { Chain = FirewallFilter.ChainType.Forward, Action = FirewallFilter.ActionType.Accept, }; connection.Save(firewallFilter); connection.Move(firewallFilter, firstFirewallRule);
Пример использования высокоуровневого API (ветка dev на GitHub): // обновить IP на интерфейсе dhcp-client connection.LoadAll<IpDhcpClient>().First().Release(connection);
Это похоже на отличный проект, который будет очень полезен. Спасибо, что поделились им с нами. Я только что скачал его и потратил некоторое время, изучая примеры и классы, но не заметил ничего, связанного с Hotspot, в частности с созданием и удалением пользовательских аккаунтов. Есть ли такая функция в библиотеке? Если нет, планируете ли вы добавить её в ближайшее время? Ещё раз большое спасибо. Марк
Привет! Очень скоро, примерно через неделю, я начну импортировать объекты hotspot, но мне нужны бета-тестеры, так как я сам эту функцию не использую. Если хочешь поучаствовать в бета-тестировании, буду благодарен за помощь. Либо можешь создать свои собственные классы (см. атрибуты TikEntity и TikProperty) и использовать их с O/R маппером в стиле расширений. Или же использовать API, похожий на ADO — управлять hotspot через стандартный интерфейс команды «Execute», как и в других библиотеках D.
Опубликована версия 1.3.0.0. Новые сущности высокого уровня: пользователи Hotspot, интерфейс (eth/wlan) var list = Connection.LoadAll<InterfaceWireless.WirelessRegistrationTable>(); Наслаждайтесь, D
Выпущена версия 1.4.0.0: Исправлен подсчёт длины слова (благодарность h44z) Починено управление пользователями Hotspot Рефакторинг Async API (очистка) Наслаждайтесь, D
Привет! Есть несколько способов справиться с этой задачей:
Используя (ITikConnection connection = ConnectionFactory.CreateConnection(TikConnectionType.Api)) { connection.Open(HOST, USER, PASS);
Через прямой вызов API (низкоуровневый доступ): string[] command = new string[] { "/ip/firewall/connection/print", "?src-address=192.168.3.103" }; var result = connection.CallCommandSync(command);
Через API, похожее на ADO.NET: var command = connection.CreateCommandAndParameters("/ip/firewall/connection/print", "src-address", "192.168.3.103"); var result = command.ExecuteList();
Через высокоуровневый O/R mapper API: // Этот класс будет частью следующего релиза, но пока можно просто добавить его в свой код [TikEntity("ip/firewall/connection")] public class FirewallConnection { [TikProperty(".id", IsReadOnly = true, IsMandatory = true)] public string Id { get; private set; }
// А вот код: using tik4net.Objects; ... var result = connection.LoadList<FirewallConnection>( connection.CreateParameter("src-address", "192.168.3.103"));
Можно вообще пропустить фильтрацию в запросе, взять все соединения и отфильтровать их потом в C# (LINQ?). Медленно, зато просто... Наслаждайтесь, D
Вероятно, нет активного соединения с IP 192.168.3.69 к роутеру (или отслеживание соединений отключено в конфигурации Mikrotik). Попробуйте загрузить все соединения без фильтра: var command = connection.CreateCommandAndParameters("/ip/firewall/connection/print"); var result = command.ExecuteList(); Наслаждайтесь, D
Выпущена новая версия 1.5.0.0. Что нового: функция TikListMerge — подробности на https://github.com/danikf/tik4net/wiki/TikListMerge, сущность FirewallConnection.ConnectionTracking, исправлены баги. Наслаждайтесь, D
Привет, danikf! Отличная работа, мужик, спасибо, что поделился. Я использую твою dll в проекте на vb.net, можешь объяснить, как установить #operations через CreateCommandAndParameters, чтобы применить операции к значениям в стеке? Пример для выполнения этого запроса: /interface/print ?type=ether ?type=vlan ?#|
Привет! Я только что обновил исходники на GitHub (обновление войдёт в следующий релиз). В обновлённой версии теперь можно просто форматировать текст команды с помощью фильтра. Непривязанный тип:
var cmd = Connection.CreateCommandAndParameters(@"/interface/print ?type=ether ?type=wlan ?#|"); var list = cmd.ExecuteList();
Строго типизированный вариант:
var cmd = Connection.CreateCommandAndParameters(@"/interface/print ?type=ether ?type=wlan ?#|"); var list = cmd.LoadList<Interface>();
Главная причина, почему стек параметров не поддерживается — это то, что он сильно усложнит API (выражения деревьев?). Поэтому на данный момент я решил не поддерживать такую конструкцию через параметры (возможно, в будущем). Наслаждайтесь, D