Информация
Настройка
Новости
Контакты
Новинка
Распродажа
Оплата
Доставка
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    API в VB.NET

    API в VB.NET

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    API в VB.NET, RouterOS
     
    Bourbon
    Guest
    #1
    0
    17.12.2013 15:48:00
    Привет всем! Нужна ваша помощь в решении моей проблемы. Мой код:

    Private Sub bt_ejecutar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_ejecutar.Click
    Dim mk = New mkAPI(tb_ip.Text)
    If Not mk.Login(user.Text, pass.Text) Then
    mk.Close()
    view.Text = “Erreur”
    Exit Sub
    End If
    view.Text = “Connecté”
    mk.Send(“/ip/address/getall”, False)
    mk.Send(“=.proplist=address”, True)
    For Each h As String In mk.Read()
    TextBox1.Text &= h
    Next
    End Sub

    Ответ маршрутизатора Routerboard: !re=address=192.168.10.70/24!done

    Хочу убрать все параметры и оставить только IP-адрес. Какое решение, пожалуйста?

    Спасибо.
     
     
     
    boen_robot
    Guest
    #2
    0
    17.12.2013 16:26:00
    Но… ты уже это сделал. Вся остальная информация в выводе — это просто протокольное требование. Чтобы избавиться от нее, просто… для каждого слова проверяй, начинается ли оно с "=address=", и если да, то получай строку после "=address=". Посмотри функции строк. Или используй другой .NET клиент, который сделает это более удобным, например, вот этот, возможно.
     
     
     
    Bourbon
    Guest
    #3
    0
    18.12.2013 07:38:00
    Спасибо за ответ. Хочу выводить в моем текстовом поле только IP-адрес (192.168.10.70) и убрать "!re=address=/24!done". Я не знаю функций на VB… Я новичок. Какая функция мне нужна? Хочу оставить строку после address= и перед /24. Спасибо за вашу помощь.
     
     
     
    boen_robot
    Guest
    #4
    0
    18.12.2013 11:25:00
    Быть новичком кажется идеальной причиной сменить клиентов, пока ты ещё не привык к одному. С упомянутым клиентом можно сделать так: Private Sub bt_ejecutar_Click(sender As Object, e As EventArgs) Handles bt_ejecutar.Click

           Dim mks = New TikSession(TikConnectorType.Api)
           Try
               mks.Open(tb_ip.Text, user.Text, pass.Text)
               view.Text = "Connecté"
           Catch ex As Exception
               view.Text = "Erreur"
           End Try

           For Each item As ITikEntityRow In mks.Connector.ExecuteReader(
               "/ip/address",
               ExecuteReaderBehaviors.None,
               New List(Of String) From {"address"}
           )
               TextBox1.Text &= item.GetStringValueOrNull("address", True)
           Next
       End Sub
     
     
     
    Bourbon
    Guest
    #5
    0
    19.12.2013 08:00:00
    Спасибо за ответ. Ок, переключу клиента. Я модифицирую свой код с использованием вашего, но (TikConnectorType.api, ITikEntityRow и ExecuteReaderBehaviors) недоступны… Я использую VB express 2010. Нужно ли мне менять софт? Или нужно добавить библиотеку в проект? Я читал сайт mikrotik4net и не нашёл там ответа… Спасибо за помощь.
     
     
     
    boen_robot
    Guest
    #6
    0
    19.12.2013 13:39:00
    Ты скачиваешь архив с сайта и распаковываешь его куда угодно на своем компьютере. В Visual Studio кликаешь правой кнопкой мыши по проекту и выбираешь "Добавить ссылку…". Выбираешь "Обзор", находишь DLL из только что распакованного архива, и, по сути, это всё. Можешь импортировать пространства имен Tik4Net ИЛИ можешь просто вручную писать "Tik4Net." перед названием каждого класса из этого пространства имен.
     
     
     
    Bourbon
    Guest
    #7
    0
    03.02.2014 15:51:00
    Привет, пытаюсь использовать библиотеку "Tik4Net", импортировал пространство имен, но выдаёт ошибку. "mks.Open" и "mks.Connector.ExecuteReader" не являются членами. Странно. Нужна ваша помощь. Спасибо!
     
     
     
    boen_robot
    Guest
    #8
    0
    03.02.2014 18:47:00
    Ты уверен, что TikSession был создан правильно? Если убрать комментарии из всех строк в Sub, кроме Dim, то программа компилируется? Какие там участники?
     
     
     
    Bourbon
    Guest
    #9
    0
    04.02.2014 08:16:00
    Спасибо за ответ. Вот мой код (Tiksession):

    Imports System
    Public Class TikSession
       Dim tcpStream As IO.Stream
       Dim tcpCon As New Net.Sockets.TcpClient

       Public Sub New(ByVal ipOrDns As String, Optional ByVal port As Integer = -1)
           Dim ips = Net.Dns.GetHostEntry(ipOrDns)
           tcpCon.Connect(ips.AddressList(0), If(port = -1, 8728, port))
           tcpStream = tcpCon.GetStream()
       End Sub

       Public Sub New(ByVal endP As System.Net.IPEndPoint)
           tcpCon.Connect(endP)
           tcpStream = tcpCon.GetStream()
       End Sub

       Public Sub Close()
           tcpStream.Close()
           tcpCon.Close()
       End Sub

       Public Function Login(ByVal user As String, ByVal pass As String) As Boolean
           Send("/login", True)
           Dim hash = Read()(0).Split(New String() {"ret="}, StringSplitOptions.None)(1)
           Send("/login")
           Send("=name=" + user)
           Send("=response=00" + EncodePassword(pass, hash), True)
           Dim res = Read()
           If (res(0) = "!done") Then
               Return True
           Else
               Return False
           End If
       End Function

       Function EncodePassword(ByVal pass As String, ByVal challange As String) As String
           Dim hash_byte(challange.Length / 2 - 1) As Byte
           For i = 0 To challange.Length - 2 Step 2
               hash_byte(i / 2) = Byte.Parse(challange.Substring(i, 2), Globalization.NumberStyles.HexNumber)
           Next
           Dim response(pass.Length + hash_byte.Length) As Byte
           response(0) = 0
           Text.Encoding.ASCII.GetBytes(pass.ToCharArray()).CopyTo(response, 1)
           hash_byte.CopyTo(response, 1 + pass.Length)
           Dim md5 = New System.Security.Cryptography.MD5CryptoServiceProvider()
           Dim hash = md5.ComputeHash(response)
           Dim hashStr As New Text.StringBuilder()
           For Each h In hash
               hashStr.Append(h.ToString("x2"))
           Next
           Return hashStr.ToString()
       End Function

       Public Sub Send(ByVal command As String, Optional ByVal EndSentence As Boolean = False)
           Dim bytes = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray())
           Dim size = EncodeLength(bytes.Length)
           tcpStream.Write(size, 0, size.Length)
           tcpStream.Write(bytes, 0, bytes.Length)
           If EndSentence Then
               tcpStream.WriteByte(0)
           End If
       End Sub

       Public Function Read() As List(Of String)
           Dim output As New List(Of String)
           Dim o = ""
           Dim tmp(4) As Byte
           Dim count As Long
           While True
               tmp(3) = tcpStream.ReadByte()
               Select Case tmp(3)
                   Case 0
                       output.Add(o)
                       If o.Substring(0, 5) = "!done" Then
                           Exit While
                       Else
                           o = ""
                           Continue While
                       End If
                   Case Is < &H80
                       count = tmp(3)
                   Case Is < &HC0
                       count = BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(3), 0, 0}, 0) ^ &H8000
                   Case Is < &HE0
                       tmp(2) = tcpStream.ReadByte()
                       count = BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(2), tmp(3), 0}, 0) ^ &HC00000
                   Case Is < &HF0
                       tmp(2) = tcpStream.ReadByte()
                       tmp(1) = tcpStream.ReadByte()
                       count = BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(1), tmp(2), tmp(3)}, 0) ^ &HE0000000
                   Case &HF0
                       tmp(3) = tcpStream.ReadByte()
                       tmp(2) = tcpStream.ReadByte()
                       tmp(1) = tcpStream.ReadByte()
                       tmp(0) = tcpStream.ReadByte()
                       count = BitConverter.ToInt32(tmp, 0)
                   Case Else
                       Exit While 'err
               End Select
               For i = 0 To count - 1
                   o += ChrW(tcpStream.ReadByte())
               Next
           End While
           Return output
       End Function

       Function EncodeLength(ByVal l As Integer) As Byte()
           If l < &H80 Then
               Dim tmp = BitConverter.GetBytes(l)
               Return New Byte() {tmp(0)}
           ElseIf l < &H4000 Then
               Dim tmp = BitConverter.GetBytes(l Or &H8000)
               Return New Byte() {tmp(1), tmp(0)}
           ElseIf l < &H200000 Then
               Dim tmp = BitConverter.GetBytes(l Or &HC00000)
               Return New Byte() {tmp(2), tmp(1), tmp(0)}
           ElseIf l < &H10000000 Then
               Dim tmp = BitConverter.GetBytes(l Or &HE0000000)
               Return New Byte() {tmp(3), tmp(2), tmp(1), tmp(0)}
           Else
               Dim tmp = BitConverter.GetBytes(l)
               Return New Byte() {&HF0, tmp(3), tmp(2), tmp(1), tmp(0)}
           End If
       End Function
    End Class

    Для меня это хорошо. Спасибо за вашу помощь.
     
     
     
    boen_robot
    Guest
    #10
    0
    06.02.2014 15:11:00
    Постой… это же не Tik4Net! Ты просто переименовал класс VB из вики в TikSession… Так не пойдёт. Нужно скачать клиент с его страницы Google Code. Ну, вот эту вот: . Как только скачаешь, добавь ссылку на этот .DLL в свой проект.
     
     
     
    Bourbon
    Guest
    #11
    0
    26.02.2014 07:53:00
    Привет, Boen_Robot! Извини за задержку, у меня сейчас не очень много времени на мой проект. Я добавил .dll, как ты и просил. Проблема в tiksession. Мне нужно создать исходный код. Я нашел много библиотек в Wiki для Mikrotik, но сообщество не предоставляет исходники. Я понимаю это. Мне нужна помощь, чтобы начать. Мое решение — чтобы кто-нибудь согласился поделиться со мной исходный код. Ты можешь помочь?
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры