Главная Другой Как использовать Lua Dissector в Wireshark

Как использовать Lua Dissector в Wireshark



Являясь одним из лучших в мире инструментов для захвата сетевых пакетов, Wireshark позволяет вам получать определенные пакеты данных, чтобы вы могли анализировать их как в автономном режиме, так и в режиме реального времени. Думайте о приложении как о способе тщательного изучения данных, проходящих через вашу сеть, что позволяет вам выявлять проблемы и нарушения.

  Как использовать Lua Dissector в Wireshark

Вы можете использовать диссекторы, если хотите проанализировать определенную часть данных пакета. Как следует из названия, этот процесс «анализирует» код, позволяя вам вырезать определенные аспекты, требующие вашего внимания. В этом руководстве объясняется, как создавать и использовать диссекторы в Wireshark с помощью языка сценариев Lua.

как открыть документы Word на телефоне с Android

Прежде чем начать — что нужно знать о диссекторах

Хотя диссекторы предлагают быстрый способ анализа частей пакета данных в Wireshark, для эффективной работы они должны следовать некоторым протоколам. Эти протоколы включают следующее:

  • Каждый созданный вами диссектор должен быть зарегистрирован для обработки определенного типа полезной нагрузки из другого протокола. Чтобы завершить эту регистрацию, вы должны назначить объект «Proto» для вашего диссектора, который вы увидите ниже.
  • Когда вы вызываете диссектор через Wireshark, он получает от приложения три вещи:
    • Объект TVB — буфер TVB из пакета данных.
    • Объект TreeItem — корень дерева, представляющий один узел в дереве данных.
    • Объект Pinfo – запись информации о пакете.
  • Вы можете вызвать диссектор только в том случае, если ваш пакет данных соответствует DissectorTable, который вы установили для своего объекта «Proto».
    • Вы можете обойти это требование, принудительно используя диссектор с помощью функции «Декодировать как». Но даже в этом случае вы можете форсировать диссектор только в том случае, если DissectorTable, который вы установили для своего объекта «Proto», имеет правильный тип.

Настройка диссектора с помощью LUA

Поскольку Wireshark написан на языке программирования C и использует его, большинство диссекторов также написаны на C. Однако вы можете использовать Lua. Этот язык сценариев проще, чем C, и, следовательно, более доступен для новичков в программировании или для тех, кто просто хочет создать диссектор, используя более легкий язык.

Хотя ваш код будет проще, диссектор, который вы получаете при использовании Lua, обычно медленнее, чем тот, который вы создаете с помощью C. Тем не менее, это шаги, которые необходимо выполнить, если вы хотите создать диссектор Wireshark с помощью Lua.

Шаг 1 — Настройте Lua в Wireshark

Вам нужно будет настроить Lua, если вы еще не использовали его в Wireshark:

  1. Нажмите «Справка», а затем «О Wireshark».
  2. Нажмите «Папки».
  3. Выберите один из следующих вариантов, чтобы создать активный Lua-скрипт:
    • Глобальные плагины Lua
    • Персональные плагины Lua
    • Личный

После активации ваш скрипт будет готов при каждом запуске Wireshark. Каждый раз, когда вы вносите изменения в этот сценарий, вам нужно либо перезапустить Wireshark, чтобы зарегистрировать изменение, либо нажать «Ctrl + Shift + L», чтобы перезагрузить все ваши сценарии Lua, чтобы сделать ваши изменения активными.

Шаг 2 — Основные шаги для создания вашего диссектора

Если вы уже знакомы с Lua, вы можете использовать следующие шаги для создания собственного скрипта диссектора, который будет работать в Wireshark:

  • Объявите протокол для вашего диссектора, который требует, чтобы вы установили как длинное имя для использования в дереве протоколов, так и короткое имя, которое служит именем отображаемого фильтра диссектора.
    • Создайте следующие три поля с соответствующими типами:
    • Вопрос – показывает тип вопроса.
    • Ответ – показывает тип ответа.
  • MessageType — показывает, запрашивает ли ваш пакет вопрос или ответ.
  • Зарегистрируйте свои поля, чтобы Wireshark знал, как их отображать. Без зарегистрированных полей вы получите сообщение «Ошибка Lua», обычно говорящее о том, что ваше ProtoField элемента дерева недействительно.
  • Создайте функцию анализа, которая включает ранее упомянутую Pinfo (содержащую данные о вашем пакете) и элемент дерева (создание дерева, которое вы добавите к поддереву). Вы также должны создать «буфер», который находится поверх вашего TCP.
  • Укажите протокол и порт, для которых Wireshark должен использовать диссектор. Например, вы можете установить протокол «TCP» и номер порта в зависимости от того, что вы хотите использовать.

Шаг 3 — Добавьте свой диссектор в Wireshark

Сейчас твой диссектор как лампочка без электричества. Он существует, но бесполезен для вас, пока вы не сможете пропустить через него какую-то силу. Другими словами, ваш диссектор еще не добавлен в Wireshark, поэтому вам нужно добавить его вручную, чтобы запустить его, выполнив следующие действия:

  1. Нажмите «Справка» и перейдите в меню «О Wireshark».
  2. Выберите вкладку «Папка», чтобы найти список путей для вашего файла Lua.
  3. Выберите «Персональные плагины Lua». При необходимости создайте каталог.
  4. Скопируйте и вставьте созданный вами файл Lua в каталог «Персональные плагины Lua». Перезагрузите Wireshark, чтобы включить анализатор.

Рекомендуется протестировать новый диссектор, открыв несколько перехваченных пакетов. Wireshark должен доставить сообщение, в котором будет указано длинное имя, выбранное вами для диссектора, а также информация о типе сообщения (вопрос или ответ) и результат проверки.

превратить мой ноутбук в хромбук

Некоторый пример кода

Если вы еще не создавали диссектор (или вы новичок в Lua), Wireshark предлагает вам удобный пример диссектора:

local p_multi = Proto("multi", "MultiProto");
local vs_protos = {
    [2] = "mtp2",
    [3] = "mtp3",
    [4] = "alcap",
    [5] = "h248",
    [6] = "ranap",
    [7] = "rnsap",
    [8] = "nbap"
}
local f_proto = ProtoField.uint8("multi.protocol", "Protocol", base.DEC, vs_protos)
local f_dir = ProtoField.uint8("multi.direction", "Direction", base.DEC, { [1] = "incoming", [0] = "outgoing"})
local f_text = ProtoField.string("multi.text", "Text")
p_multi.fields = { f_proto, f_dir, f_text }
local data_dis = Dissector.get("data")
local protos = {
    [2] = Dissector.get("mtp2"),
    [3] = Dissector.get("mtp3"),
    [4] = Dissector.get("alcap"),
    [5] = Dissector.get("h248"),
    [6] = Dissector.get("ranap"),
    [7] = Dissector.get("rnsap"),
    [8] = Dissector.get("nbap"),
    [9] = Dissector.get("rrc"),
    [10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
    [11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
}
function p_multi.dissector(buf, pkt, tree)
    local subtree = tree:add(p_multi, buf(0,2))
    subtree:add(f_proto, buf(0,1))
    subtree:add(f_dir, buf(1,1))
    local proto_id = buf(0,1):uint()
    local dissector = protos[proto_id]
    if dissector ~= nil then
        -- Dissector was found, invoke subdissector with a new Tvb,
        -- created from the current buffer (skipping first two bytes).
        dissector:call(buf(2):tvb(), pkt, tree)
    elseif proto_id < 2 then
        subtree:add(f_text, buf(2))
        -- pkt.cols.info:set(buf(2, buf:len() - 3):string())
    else
        -- fallback dissector that just shows the raw data.
        data_dis:call(buf(2):tvb(), pkt, tree)
    end
end
local wtap_encap_table = DissectorTable.get("wtap_encap")
local udp_encap_table = DissectorTable.get("udp.port")
wtap_encap_table:add(wtap.USER15, p_multi)
wtap_encap_table:add(wtap.USER12, p_multi)
udp_encap_table:add(7555, p_multi)

Постдиссекторы и цепочечные диссекторы

Возможно, вам захочется более подробно изучить использование диссекторов после того, как вы освоите их создание в Lua. Wireshark предлагает два дополнительных типа диссекторов — постдиссекторы и цепные диссекторы, которые предлагают больше функциональных возможностей.

как мне обновить мою версию Android?

Постдиссектор очень похож на окончательную проверку всех диссекторов, которые вы запустили для пакета. Вы регистрируете его, чтобы получать уведомления, как только Wireshark вызовет любой другой диссектор, который вы хотите использовать, и вы можете использовать его для фильтрации столбцов «Протокол» и «Информация». Эта функция особенно полезна, если вы хотите отфильтровать несколько пакетов в сеансе, когда у вас был большой разрыв между наборами данных и вы не можете вспомнить каждый из них по отдельности.

Цепочка диссекторов выполняет аналогичную функцию (по крайней мере, с точки зрения фильтрации ранее использованных диссекторов), предоставляя вам доступ к данным одного диссектора. Ключевым преимуществом здесь является то, что связанный диссектор не должен снова запускать каждый пакет, что дает вам результат, не заставляя вас ждать, пока исходный диссектор снова запустится.

Рассекать на Lua

Учитывая, что Wireshark уже предлагает возможность создавать диссекторы на C (его естественном языке), вы можете не видеть необходимости создавать их и на Lua. Тем не менее, те, кому не нравится C, а также те, кто уже освоил Lua, могут обнаружить, что легковесные сценарии Lua облегчают создание их диссекторов. Конечно, вам приходится идти на компромисс с более длительным временем загрузки при запуске процесса по сравнению с диссекторами на основе C, но в любом случае полезно иметь эту опцию.

С учетом сказанного, мы хотим услышать от вас. Как часто вы используете диссекторы в Wireshark? Пробовали ли вы раньше создавать их на C и какие преимущества, по вашему мнению, дает создание диссекторов на Lua? Дайте нам знать в комментариях ниже.

Интересные статьи

Выбор редакции

Как отключить голосовое управление на ваших AirPods
Как отключить голосовое управление на ваших AirPods
Голосовое управление - это здорово, но есть и недостатки. Некоторые пользователи жаловались на то, что случайно звонят людям, когда они не в ушах. Они понятия не имели, что звонили. Это
Firefox отказывается от поддержки Windows Vista и Windows XP
Firefox отказывается от поддержки Windows Vista и Windows XP
Есть плохие новости из лагеря Firefox для пользователей Windows XP. Mozilla, разработчики популярного браузера, решили прекратить поддержку Windows XP и Windows Vista, начиная с Firefox 53. Firefox - единственный современный браузер, все еще доступный для Windows XP и Vista. Хотя Microsoft прекратила всю поддержку Windows XP и
Почему iPhone заблокирован от использования в сети [объяснено и исправлено]
Почему iPhone заблокирован от использования в сети [объяснено и исправлено]
Невозможно программно отключить автоматическую рекламу на странице, так что вот!
Это новые функции, которые OneDrive получил в августе 2020 г.
Это новые функции, которые OneDrive получил в августе 2020 г.
Microsoft раскрыла, какие функции компания добавила в OneDrive, облачное хранилище и службу синхронизации. В объявлении упоминаются записи дорожной карты, реализованные в августе, а также несколько изменений, внесенных в онлайн-приложения Office. Что такое OneDrive OneDrive - это решение для онлайн-хранения документов, созданное Microsoft, которое поставляется в виде
Как узнать MAC-адрес на iPhone
Как узнать MAC-адрес на iPhone
Вы можете найти свой MAC-адрес или адрес Wi-Fi на iPhone в двух местах, но он не является статичным, если вы не отключите «Частный адрес».
8 лучших бесплатных генеалогических сайтов 2024 года
8 лучших бесплатных генеалогических сайтов 2024 года
Веб-сайты генеалогии могут помочь вам найти записи, необходимые для построения генеалогического древа. Вот лучшее, что на данный момент доступно бесплатно.
Безопасен ли Менеджер паролей Google? Что нужно учитывать перед его использованием
Безопасен ли Менеджер паролей Google? Что нужно учитывать перед его использованием
Менеджер паролей Google хранит ваши пароли в хранилище, используя шифрование военного уровня. Обычно это считается безопасным, но есть шаги, которые вы можете предпринять, чтобы сделать его безопаснее. Например, добавьте два дополнительных символа к автоматически сгенерированным паролям Google и защитите свои устройства.