Основен други Как да използвате Lua Dissector в Wireshark

Как да използвате Lua Dissector в Wireshark



Като един от най-добрите инструменти за улавяне на мрежови пакети в света, Wireshark ви позволява да получите конкретни пакети с данни, така че да можете да ги анализирате както офлайн, така и в реално време. Мислете за приложението като за начин за внимателно изследване на данните, преминаващи през вашата мрежа, което ви позволява да улавяте проблеми и нередности.

  Как да използвате Lua Dissector в Wireshark

Можете да използвате дисектори, ако искате да анализирате конкретна част от данните на пакета. Както подсказва името, този процес „дисектира“ кода, което ви позволява да изрежете определени аспекти, които се нуждаят от вашето внимание. Този урок обяснява как да създавате и използвате дисектори в Wireshark с помощта на скриптовия език Lua.

как да разберете дали вашият блокиран

Преди да започнете – какво трябва да знаете за дисекторите

Въпреки че дисекторите предлагат бърз начин за анализиране на части от пакет данни в Wireshark, те трябва да следват някои протоколи, за да работят ефективно. Тези протоколи включват следното:

  • Всеки дисектор, който създавате, трябва да бъде регистриран, за да обработва определен тип полезен товар от различен протокол. За да завършите тази регистрация, трябва да присвоите обект „Proto“ на вашия дисектор, който ще видите по-долу.
  • Когато извикате дисектор чрез Wireshark, той получава три неща от приложението:
    • TVB обект – TVB буфер от пакета данни.
    • TreeItem Object – Корен на дърво, който представлява единичен възел в дърво с данни.
    • Pinfo Object – Запис с информация за пакет.
  • Можете да извикате дисектор само ако вашият пакет от данни съответства на DissectorTable, който сте задали на вашия „Proto“ обект.
    • Можете да заобиколите това изискване, като наложите използването на дисектор чрез функцията „Декодиране като“. Но дори и тогава можете да принудите дисектора само ако DissectorTable, който сте задали на вашия „Proto“ обект, е от правилния тип.

Настройване на вашия дисектор с помощта на LUA

Тъй като Wireshark е както написан на, така и използва езика за програмиране C, повечето дисектори са написани по подобен начин на C. Въпреки това, може да пожелаете да използвате Lua. Този скриптов език е по-опростен от C и по този начин по-достъпен за начинаещи кодиращи или тези, които просто искат да създадат дисектор, използвайки по-лек език.

Въпреки че кодът ви ще бъде по-опростен, дисекторът, който получавате, когато използвате Lua, обикновено е по-бавен от този, който бихте създали с помощта на C. Въпреки това, това са стъпките, които трябва да следвате, ако искате да създадете дисектор на Wireshark с помощта на Lua.

Стъпка 1 – Настройте Lua в Wireshark

Ще трябва да настроите Lua, ако не сте го използвали в Wireshark преди:

как да поправите телевизия vizio, която няма да се включва
  1. Щракнете върху „Помощ“, последвано от „Относно Wireshark“.
  2. Кликнете върху „Папки“.
  3. Изберете едно от следните, за да създадете активен Lua скрипт:
    • Глобални приставки за Lua
    • Лични приставки за Lua
    • Лична

Веднъж активиран, вашият скрипт ще бъде готов всеки път, когато стартирате Wireshark. Всеки път, когато правите промяна в този скрипт, трябва или да рестартирате Wireshark, за да регистрирате промяната, или да натиснете „Ctrl + Shift + L“, за да презаредите всичките си Lua скриптове, за да направите промените активни.

Стъпка 2 – Основните стъпки за създаване на вашия дисектор

Ако вече сте запознати с Lua, можете да използвате следните стъпки, за да създадете свой собствен дисекторен скрипт, който ще работи в Wireshark:

  • Декларирайте протокола за вашия дисектор, което изисква да зададете както дълго име за използване в дървото на протокола, така и кратко име, което служи като име на филтъра за показване на дисектора.
    • Създайте следните три полета със съответните им типове:
    • Въпрос – Показва вида на въпроса.
    • Отговор – Показва типа отговор.
  • MessageType – Демонстрира дали вашият пакет изисква въпрос или отговор.
  • Регистрирайте вашите полета, така че Wireshark да знае как да ги покаже. Без регистрирани полета ще получите съобщение „Lua Error“, което обикновено ви казва, че вашето Tree Item ProtoField е невалидно.
  • Създайте функция за дисекция, която включва споменатата по-горе Pinfo (съдържаща данни за вашия пакет) и Tree Item (създаване на дървото, което ще добавите към поддърво). Трябва също така да създадете „буфер“, който се намира върху вашия TCP.
  • Посочете както протокола, така и порта, за който Wireshark трябва да използва дисектора. Например, можете да зададете протокола на „TCP“ и номера на порта на който искате да използвате.

Стъпка 3 – Добавете своя дисектор към Wireshark

В момента вашият дисектор е като електрическа крушка без електричество. Съществува, но не ви е от полза, докато не успеете да прекарате малко енергия през него. С други думи, вашият дисектор все още не е добавен към Wireshark, така че трябва да го добавите ръчно, за да го стартирате, като използвате тези стъпки:

  1. Кликнете върху „Помощ“ и се насочете към менюто „Относно Wireshark“.
  2. Изберете раздела „Папка“, за да намерите списък с пътища за вашия Lua файл.
  3. Изберете „Лични добавки за Lua“. Създайте директория, ако е необходимо.
  4. Копирайте и поставете Lua файла, който сте създали, в директорията „Personal Lua Plugins“. Презаредете 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 предлага два допълнителни вида дисектори – постдисектори и верижни дисектори – които предлагат повече функционалност.

Постдисекторът много прилича на последна проверка на всички дисектори, които сте изпълнили за пакет. Регистрирате го, за да получите известие, след като Wireshark извика всеки друг дисектор, който искате да използва, и можете да го използвате, за да филтрирате колоните „Протокол“ и „Информация“. Тази функция е особено полезна, ако искате да филтрирате множество пакети в сесия, при която сте имали дълга пауза между наборите от данни и не можете да си спомните всеки един поотделно.

Верижните дисектори изпълняват подобна функция (поне по отношение на филтриране през предишни използвани дисектори), като ви дават достъп до данните на един дисектор. Основното предимство тук е, че верижният дисектор не трябва да преминава през всеки пакет отново, като ви дава резултат, без да ви принуждава да чакате оригиналния дисектор да стартира отново.

компютърът замръзва за няколко секунди

Дисектирайте в Lua

Като се има предвид, че Wireshark вече предлага възможност за създаване на дисектори в C (неговия естествен език), може да не видите необходимостта да ги създавате и в Lua. И все пак тези, които не се чувстват добре с C, както и тези, които вече са усвоили Lua, може да открият, че олекотените скриптове на Lua улесняват създаването на техните дисектори. Разбира се, трябва да замените по-дълго време за зареждане, когато стартирате процеса в сравнение с базираните на C дисектори, но е полезно да имате опцията независимо от това.

С това казано, искаме да чуем от вас. Колко често използвате дисектори в Wireshark? Опитвали ли сте да ги създавате в C преди и какви ползи мислите, че предоставя правенето на дисектори в Lua? Уведомете ни в секцията за коментари по-долу.

Интересни Статии

Избор На Редактора

Bluetooth работи ли в самолетен режим?
Bluetooth работи ли в самолетен режим?
Разберете как да използвате Bluetooth слушалки в самолет и кога да ги държите скрити в багажа си.
Всички спътници в Baldur’s Gate 3
Всички спътници в Baldur’s Gate 3
Ролевите игри (RPG) използват спътници, за да насърчат играчите да създават емоционални привързаности с други герои в играта. “Baldur’s Gate 3” (BG3) не прави изключение. От интимни връзки до редовни приятелства, играчите могат да образуват изключителни връзки с подобни-
Как да го поправите, когато клавиатурата на Lenovo не работи
Как да го поправите, когато клавиатурата на Lenovo не работи
Когато клавиатурата на вашия лаптоп Lenovo не работи, възможните решения включват актуализиране на драйверите, изключване на Cortana и почистване на клавиатурата.
Деактивирайте онлайн разпознаването на реч с групови правила в Windows 10
Деактивирайте онлайн разпознаването на реч с групови правила в Windows 10
Windows 10 позволява деактивиране на онлайн разпознаването на реч с групови правила. Ето как да приложите ограничението, като използвате gpedit.msc и настройка на системния регистър.
Как да изпратите повече от $500 със Zelle
Как да изпратите повече от $500 със Zelle
Има много причини, поради които хората избират да се откажат от пари в брой за онлайн парични преводи. За много потребители това е по-удобният вариант и едно от най-големите предимства е, че не се налага да се отправят към банката за пари
Изтрийте сигурно свободно място в Windows без инструменти на трети страни
Изтрийте сигурно свободно място в Windows без инструменти на трети страни
Ако сте изтрили някои чувствителни данни и искате да сте сигурни, че те не могат да бъдат възстановени, ето как да изтриете сигурно свободното пространство без инструмент на трета страна.
Научете как да създадете Yahoo Mail акаунт
Научете как да създадете Yahoo Mail акаунт
Можете да се регистрирате за чисто нов имейл акаунт с Yahoo само с няколко стъпки. Уебсайтът за настолен компютър е най-добрата среда за настройка на този адрес.