Основен други Как да използвате 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? Уведомете ни в секцията за коментари по-долу.

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

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

Как да инсталирате драйвер за принтер
Как да инсталирате драйвер за принтер
Драйверът за принтер е софтуер, който казва на вашия компютър как да използва функциите на вашия принтер. Ето как да инсталирате или преинсталирате драйвер за вашия принтер.
Числата на CUSIP и как да ги търсите
Числата на CUSIP и как да ги търсите
Научете какво е CUSIP номер, какво означават знаците в един и основите за това как да търсите CUSIP номер, като използвате няколко различни метода.
8-те най-добри приложения за новини за iPhone през 2024 г
8-те най-добри приложения за новини за iPhone през 2024 г
Искате ли да сте в крак с последните извънредни новини? Тогава имате нужда от най-добрите приложения за новини за iPhone. Този списък включва всички най-предпочитани за получаване на вашите новини точно сега.
Aero Patch 1.4
Aero Patch 1.4
Ето Aero пластир, създаден от моя приятел г-н dUSHA, който позволява пълнофункционални aero стъкло и функции за персонализация в Windows 7 Home Basic и Windows 7 Starter, като например Aero Glass и оцветяване. - Пълна поддръжка на теми, включително RSS и слайдшоу. , Shake и WinFlip 3D. - Поддръжка на теми на трети страни. Най-новата версия е 1.4, вижте
Преглед на Asus Transformer Book T100: Хибридният хибрид, който започна всичко
Преглед на Asus Transformer Book T100: Хибридният хибрид, който започна всичко
Asus Transformer Book T100 беше устройството, което доведе до евтиното зареждане на Windows, но времето - и технологията - продължиха напред. От стартирането му няколко поколения нискотарифни Windows клаудбукове и Chromebook на Google преобразиха лаптопа
Как да изтрия всички публикации в Reddit
Как да изтрия всички публикации в Reddit
https://www.youtube.com/watch?v=tbWDDJ6HAeI Ако сте дългогодишен потребител на Reddit, има вероятност да съжалявате за поне няколко публикации, които сте споделили с общността. Да се ​​избягваш за споделяне на непопулярно мнение е бизнес като
Как да смените басите на Airpods
Как да смените басите на Airpods
Едно от най-добрите неща за AirPods е, че можете да персонализирате собствения си опит. Можете да слушате музика, когато пожелаете, като имате свободни ръце за изпълнение на други задачи, но това не е всичко. Вие