VB.NET MAC OUI Поиск

Доброе утро,

Я создал проект vb.NET, который извлекает данные из HTML-файла WireShark, найденного по адресу https://code.wireshark.org/review/gitweb?p=wireshark.git;a=blob_plain;f=manuf.;hb=HEAD.

До сих пор мне удавалось загружать страницу в виде строки и искать строку, чтобы подтвердить, найден ли в строке «mac».

Я хотел бы, чтобы он искал MAC-адрес и выводил всю строку, на которой появляется MAC.

Например, если я ищу 00-00-00-00-00-00, я хотел бы иметь возможность извлечь всю строку «00:00:00 Xerox Xerox Corporation».

Вот что у меня есть:

Private Sub btn_search_Click(sender As Object, e As EventArgs) Handles btn_search.Click
    Dim mac As String = txt_MAC.Text.ToUpper
    Dim pattern As Regex = New Regex("^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$")
    Dim match As Match = pattern.Match(mac)

    If match.Success Then
        mac = mac.Replace("-", ":")
        mac = mac.Substring(0, mac.Length - 9)

        Dim wc As New Net.WebClient
        Dim html As String = wc.DownloadString("https://code.wireshark.org/review/gitweb?p=wireshark.git;a=blob_plain;f=manuf;hb=HEAD")
        Dim macIndex = html.IndexOf(mac) 'returns line number in string

        MsgBox("Valid MAC: " & mac)

        If html.Contains(mac) Then
            'Display MAC + Vendor. IE.... 0:00:01   Xerox   Xerox Corporation'
            ' Is there a way to read only the specified line number in the string?
        End If

    Else
        MsgBox("You must enter a valid MAC")
    End If
End Sub

Любая помощь приветствуется.


person Cody MacLeod    schedule 05.10.2018    source источник
comment
Простейшая идея: прочитать файл построчно и протестировать регулярное выражение. Если ваши строки могут быть очень длинными, использование регулярного выражения с .* вокруг шаблона может замедлить обработку.   -  person Wiktor Stribiżew    schedule 05.10.2018
comment
Я использовал Dim macIndex = html.IndexOf(mac), чтобы получить индекс того, где находится искомый MAC-адрес. Я получаю 2472. Есть ли способ прочитать эту конкретную строку из строки?   -  person Cody MacLeod    schedule 05.10.2018
comment
Вы делаете слишком много лишних вещей. Используйте 1_   -  person Wiktor Stribiżew    schedule 05.10.2018


Ответы (2)


Вместо разбора HTML-файлов вы можете получить список поиска Mac-адресов в виде XML-файла. из предыдущей ссылки.

Затем вы можете использовать фрагмент, подобный приведенному в этом вопросе Поиск в XML в VB.NET для поиска в XML

person Samy Massoud    schedule 17.12.2020

Хотя это немного небрежно, я смог сделать это с помощью следующего кода:

        Dim wc As New Net.WebClient
        Dim html As String = wc.DownloadString("https://code.wireshark.org/review/gitweb?p=wireshark.git;a=blob_plain;f=manuf;hb=HEAD")
        Dim macIndex = html.IndexOf(mac)

        If html.Contains(mac) Then
            txt_result.Text = "Searching... "
            txt_result.Text = html.Chars(macIndex) & html.Chars(macIndex + 1) & html.Chars(macIndex + 2) & html.Chars(macIndex + 3) & html.Chars(macIndex + 4) & html.Chars(macIndex + 5) & html.Chars(macIndex + 6) & html.Chars(macIndex + 7) & html.Chars(macIndex + 8) & html.Chars(macIndex + 9) & html.Chars(macIndex + 10)

Благодарю вас!

person Cody MacLeod    schedule 05.10.2018
comment
Вместо получения и объединения каждого символа вы можете просто использовать String.Substring(): txt_result.Text = html.Substring(macIndex, 11) - person Visual Vincent; 06.10.2018