Hlavná Iné Ako používať disektor Lua v programe Wireshark

Ako používať disektor Lua v programe Wireshark



Ako jeden z najlepších svetových nástrojov na zachytávanie sieťových paketov vám Wireshark umožňuje získať konkrétne dátové pakety, takže ich môžete analyzovať offline aj v reálnom čase. Myslite na aplikáciu ako na spôsob, ako podrobne preskúmať údaje prúdiace vašou sieťou, čo vám umožní zachytiť problémy a nezrovnalosti.

  Ako používať disektor Lua v programe Wireshark

Ak chcete analyzovať konkrétnu časť údajov paketu, môžete použiť disektory. Ako už názov napovedá, tento proces „rozpitvá“ kód, čo vám umožní odstrániť určité aspekty, ktoré si vyžadujú vašu pozornosť. Tento tutoriál vysvetľuje, ako vytvoriť a používať disektory v programe Wireshark pomocou skriptovacieho jazyka Lua.

Skôr ako začnete – Čo potrebujete vedieť o disektoroch

Aj keď disektory ponúkajú rýchly spôsob, ako analyzovať časti dátového paketu v programe Wireshark, musia dodržiavať niektoré protokoly, aby fungovali efektívne. Tieto protokoly zahŕňajú nasledujúce:

  • Každý disektor, ktorý vytvoríte, musí byť zaregistrovaný na spracovanie nastaveného typu užitočného zaťaženia z iného protokolu. Na dokončenie tejto registrácie musíte svojmu disektoru priradiť objekt „Proto“, ktorý uvidíte nižšie.
  • Keď zavoláte disektora cez Wireshark, dostane z aplikácie tri veci:
    • Objekt TVB – vyrovnávacia pamäť TVB z dátového paketu.
    • Objekt TreeItem – Koreň stromu, ktorý predstavuje jeden uzol v strome údajov.
    • Pinfo Object – informačný záznam o pakete.
  • Disector môžete zavolať iba vtedy, ak sa váš dátový paket zhoduje s DissectorTable, ktorú ste nastavili pre váš objekt „Proto“.
    • Túto požiadavku môžete obísť vynútením použitia disektora pomocou funkcie „Decode As“. Ale aj tak môžete disektor vynútiť iba vtedy, ak je DissectorTable, ktorú ste nastavili pre váš objekt „Proto“, správneho typu.

Nastavenie disektora pomocou LUA

Keďže Wireshark je napísaný aj používa programovací jazyk C, väčšina disektorov je podobne napísaná v C. Možno však budete chcieť použiť Lua. Tento skriptovací jazyk je jednoduchší ako C, a teda prístupnejší pre začiatočníkov v kódovaní alebo pre tých, ktorí chcú jednoducho vytvoriť disektor pomocou ľahšieho jazyka.

Aj keď bude váš kód jednoduchší, disektor, ktorý získate pri používaní Lua, je zvyčajne pomalší ako ten, ktorý by ste vytvorili pomocou C. Ak však chcete pomocou Lua vytvoriť disektor Wireshark, postupujte podľa týchto krokov.

Krok 1 – Nastavte Lua vo Wireshark

Ak ste Lua ešte nepoužili vo Wiresharku, musíte si ho nastaviť:

  1. Kliknite na „Pomocník“ a potom na „O programe Wireshark“.
  2. Kliknite na „Priečinky“.
  3. Ak chcete vytvoriť aktívny skript Lua, vyberte jednu z nasledujúcich možností:
    • Globálne doplnky Lua
    • Osobné doplnky Lua
    • Osobné

Po aktivácii bude váš skript pripravený vždy, keď spustíte Wireshark. Zakaždým, keď vykonáte zmenu v tomto skripte, musíte buď reštartovať Wireshark, aby ste zaregistrovali zmenu, alebo stlačte „Ctrl + Shift + L“ na opätovné načítanie všetkých vašich skriptov Lua, aby sa vaše zmeny aktivovali.

Krok 2 – Základné kroky na vytvorenie vášho disektora

Ak už poznáte Lua, môžete použiť nasledujúce kroky na vytvorenie vlastného disektorového skriptu, ktorý bude fungovať vo Wiresharku:

  • Deklarujte protokol pre svoj disektor, ktorý vyžaduje, aby ste nastavili dlhý názov na použitie v strome protokolov a krátky názov, ktorý slúži ako názov zobrazovacieho filtra disektora.
    • Vytvorte nasledujúce tri polia s príslušnými typmi:
    • Otázka – zobrazuje typ otázky.
    • Odpoveď – zobrazuje typ odpovede.
  • MessageType – ukazuje, či váš paket vyžaduje otázku alebo odpoveď.
  • Zaregistrujte svoje polia, aby Wireshark vedel, ako ich zobraziť. Bez zaregistrovaných polí dostanete správu „Lua Error“, ktorá vám zvyčajne povie, že vaše ProtoField položky stromu je neplatné.
  • Vytvorte funkciu pitvy, ktorá obsahuje vyššie uvedené Pinfo (obsahujúce údaje o vašom pakete) a položku stromu (vytvorenie stromu, ktorý pripojíte k podstromu). Musíte tiež vytvoriť „buffer“, ktorý je umiestnený na vrchole vášho TCP.
  • Zadajte protokol aj port, pre ktorý musí Wireshark použiť disektor. Napríklad môžete nastaviť protokol na „TCP“ a číslo portu na ľubovoľné, ktoré chcete použiť.

Krok 3 – Pridajte svoj disektor do Wireshark

Práve teraz je váš disektor ako žiarovka bez elektriny. Existuje, ale nie je vám k ničomu, kým cez neho neprevediete energiu. Inými slovami, váš disektor ešte nie je pridaný do Wireshark, takže ho musíte pridať manuálne, aby ste ho spustili pomocou týchto krokov:

  1. Kliknite na „Pomocník“ a prejdite do ponuky „O programe Wireshark“.
  2. Vyberte kartu „Priečinok“ a nájdite zoznam ciest pre váš súbor Lua.
  3. Vyberte možnosť „Osobné doplnky Lua“. V prípade potreby vytvorte adresár.
  4. Skopírujte a prilepte súbor Lua, ktorý ste vytvorili, do adresára „Personal Lua Plugins“. Znovu načítajte Wireshark, aby ste zapli disektor.

Je to dobrý nápad spustiť test na vašom novom disektore otvorením niektorých paketov, ktoré ste zachytili. Wireshark by mal doručiť správu, ktorá zobrazuje dlhý názov, ktorý ste vybrali pre váš disektor, spolu s informáciami o type správy (otázka alebo odpoveď) a výsledku vašej kontroly.

Nejaký vzorový kód

Ak ste ešte nevytvorili disektor (alebo ste pre Lua nový), Wireshark ponúka praktický príklad disektora, ktorý si môžete vyskúšať:

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)

Postdisektory a reťazové disektory

Možno budete chcieť ísť trochu viac do hĺbky s používaním disektorov, keď ich zvládnete v Lua. Wireshark ponúka dva ďalšie typy disektorov – postdissectors a chained disectors – ktoré ponúkajú viac funkcií.

Ako zruším svoj účet Netflix?

Postdissektor je v podstate ako posledná kontrola všetkých disektorov, ktoré ste spustili pre paket. Zaregistrujete ho, aby ste dostali upozornenie, keď Wireshark zavolá každý ďalší disektor, ktorý chcete použiť, a môžete ho použiť na filtrovanie stĺpcov „Protokol“ a „Informácie“. Táto funkcia je užitočná najmä vtedy, ak chcete odfiltrovať viacero paketov v relácii, kde máte medzi súbormi údajov dlhú medzeru a nemôžete si každý jednotlivo vyvolať.

Reťazové disektory plní podobnú funkciu (aspoň pokiaľ ide o filtrovanie cez predtým používané disektory) tým, že vám poskytuje prístup k údajom jedného disektora. Kľúčovou výhodou je, že reťazený disektor nemusí znova prechádzať každým paketom, čo vám dáva výsledok bez toho, aby ste museli čakať, kým sa znova spustí pôvodný disektor.

Pitva v Lua

Vzhľadom na to, že Wireshark už ponúka možnosť vytvárať disektory v C (jeho prirodzenom jazyku), možno nevidíte potrebu vytvárať ich aj v Lua. Napriek tomu tí, ktorí nie sú spokojní s C, ako aj tí, ktorí už ovládajú Lua, môžu zistiť, že ľahké skriptovanie Lua uľahčuje vytváranie ich disektorov. Je pravda, že pri spustení procesu musíte v porovnaní s disektormi založenými na C nahradiť dlhší čas načítania, ale je užitočné mať túto možnosť bez ohľadu na to.

S tým povedané, chceme od vás počuť. Ako často používate disektory vo Wiresharku? Skúsili ste ich už vytvoriť v jazyku C a aké výhody vám podľa vás prináša vytváranie disektorov v jazyku Lua? Dajte nám vedieť v sekcii komentárov nižšie.

Zaujímavé Články

Redakcia Choice

Zobraziť iba určité applety ovládacieho panela v systéme Windows 10
Zobraziť iba určité applety ovládacieho panela v systéme Windows 10
Ovládací panel obsahuje množstvo možností, ktoré nie sú k dispozícii v Nastaveniach. Pozrime sa, ako zobraziť iba určené applety ovládacieho panela v systéme Windows 10.
Chyba CRC: čo to je a ako ju opraviť
Chyba CRC: čo to je a ako ju opraviť
Ľahko zrozumiteľná definícia chybového hlásenia kontroly cyklickej redundancie a čo robiť, keď sa zobrazí na počítačoch so systémom Windows 10 a macOS.
Recenzia Pinnacle Studio 12
Recenzia Pinnacle Studio 12
Čísla verzií softvéru sú ako psie roky. V okamihu, keď číslo dosiahne dvojciferné číslo, očakávate, že aplikácia bude dostatočne zrelá. S verziou 10 Studio však Pinnacle vymenil základný renderovací modul a toto trvalo
Venmo – Ako získať peniaze späť
Venmo – Ako získať peniaze späť
Venmo je skvelá platforma na odosielanie a prijímanie peňazí, ktorá sa v popularite približuje k službe PayPal. Či už potrebujete poslať peniaze priateľovi alebo zaplatiť za služby priamo na webovej stránke, môžete tak urobiť tu. Avšak, nehody
IDM je poškodený - Ako opraviť
IDM je poškodený - Ako opraviť
IDM alebo Správca sťahovania z Internetu je softvér, ktorý sa integruje do prehliadačov Chrome, Firefox a iných webových prehľadávačov. Tento užitočný nástroj môže niekoľkokrát zvýšiť rýchlosť sťahovania, ale tiež vám umožňuje naplánovať sťahovanie a pozastaviť a
Ako pridať písma do programu Word
Ako pridať písma do programu Word
Písma môžete importovať do všetkých verzií programu Microsoft Word, ktoré sú k dispozícii pre Windows, Mac a mobilné zariadenia.
Ako prezimovať počítač v systéme Windows 10
Ako prezimovať počítač v systéme Windows 10
V tomto článku sa pozrieme na to, ako prezimovať počítač v systéme Windows 10. Vysvetľujú sa rôzne metódy, vrátane grafického používateľského rozhrania a príkazového riadku.