Hlavní jiný Jak používat Lua Dissector ve Wiresharku

Jak používat Lua Dissector ve Wiresharku



Jako jeden z nejlepších světových nástrojů pro zachycení síťových paketů vám Wireshark umožňuje získat konkrétní datové pakety, takže je můžete analyzovat offline i v reálném čase. Představte si aplikaci jako způsob, jak podrobně prozkoumat data proudící vaší sítí, což vám umožní zachytit problémy a nesrovnalosti.

  Jak používat Lua Dissector ve Wiresharku

Pokud chcete analyzovat konkrétní část dat paketu, můžete použít disektory. Jak název napovídá, tento proces „rozebírá“ kód a umožňuje vám vyjmout určité aspekty, které vyžadují vaši pozornost. Tento tutoriál vysvětluje, jak vytvořit a používat disektory ve Wiresharku pomocí skriptovacího jazyka Lua.

Než začnete – Co potřebujete vědět o disektorech

Přestože disektory nabízejí rychlý způsob, jak analyzovat části datového paketu ve Wiresharku, musí se řídit některými protokoly, aby fungovaly efektivně. Tyto protokoly zahrnují následující:

  • Každý disektor, který vytvoříte, musí být registrován, aby mohl zpracovávat nastavený typ užitečného zatížení z jiného protokolu. K dokončení této registrace musíte svému disektoru přiřadit objekt „Proto“, který uvidíte níže.
  • Když zavoláte disektor přes Wireshark, obdrží z aplikace tři věci:
    • Objekt TVB – Vyrovnávací paměť TVB z datového paketu.
    • Objekt TreeItem – Kořen stromu, který představuje jeden uzel v datovém stromu.
    • Pinfo Object – Informační záznam paketu.
  • Dissector můžete volat pouze tehdy, pokud váš datový paket odpovídá DissectorTable, kterou jste nastavili pro váš objekt „Proto“.
    • Tento požadavek můžete obejít vynucením použití disektoru pomocí funkce „Decode As“. Ale i tak můžete disektor vynutit pouze tehdy, pokud je DissectorTable, kterou nastavíte pro váš objekt „Proto“, správného typu.

Nastavení disektoru pomocí LUA

Vzhledem k tomu, že Wireshark je napsán v programovacím jazyce C a zároveň jej používá, většina disektorů je podobně napsána v jazyce C. Možná však budete chtít použít Lua. Tento skriptovací jazyk je jednodušší než C, a proto je přístupnější pro nováčky v kódování nebo pro ty, kteří chtějí jednoduše vytvořit disektor pomocí lehčího jazyka.

I když bude váš kód jednodušší, disektor, který získáte při použití Lua, je obvykle pomalejší než ten, který byste vytvořili pomocí C. Nicméně toto jsou kroky, které je třeba dodržet, pokud chcete vytvořit disektor Wireshark pomocí Lua.

Krok 1 – Nastavte Lua ve Wiresharku

Pokud jste ji ve Wiresharku dosud nepoužívali, budete ji muset nastavit:

  1. Klikněte na „Nápověda“ a poté na „O aplikaci Wireshark“.
  2. Klikněte na „Složky“.
  3. Chcete-li vytvořit aktivní skript Lua, vyberte jednu z následujících možností:
    • Globální Lua pluginy
    • Osobní Lua pluginy
    • Osobní

Po aktivaci bude váš skript připraven, kdykoli spustíte Wireshark. Pokaždé, když v tomto skriptu provedete změnu, musíte buď restartovat Wireshark, aby se změna zaregistrovala, nebo stisknutím „Ctrl + Shift + L“ znovu načíst všechny vaše skripty Lua, aby byly změny aktivní.

jak zrušit ukotvení obrázku ve Wordu

Krok 2 – Základní kroky pro vytvoření vašeho disektoru

Pokud již Lua znáte, můžete pomocí následujících kroků vytvořit svůj vlastní disektorový skript, který bude fungovat ve Wiresharku:

  • Deklarujte protokol pro svůj disektor, což vyžaduje, abyste nastavili jak dlouhý název pro použití ve stromu protokolu, tak krátký název, který slouží jako název zobrazovacího filtru disektoru.
    • Vytvořte následující tři pole s příslušnými typy:
    • Otázka – Zobrazuje typ otázky.
    • Odpověď – Zobrazuje typ odpovědi.
  • MessageType – Ukazuje, zda váš paket vyžaduje otázku nebo odpověď.
  • Zaregistrujte svá pole, aby Wireshark věděl, jak je zobrazit. Bez registrovaných polí obdržíte zprávu „Lua Error“, která vám obvykle sděluje, že vaše ProtoField položky stromu je neplatné.
  • Vytvořte disekční funkci, která obsahuje dříve zmíněné Pinfo (obsahující data o vašem paketu) a Tree Item (vytvoření stromu, který přidáte k podstromu). Musíte také vytvořit „vyrovnávací paměť“, která je umístěna nad vaším TCP.
  • Zadejte protokol i port, pro který musí Wireshark použít disektor. Můžete například nastavit protokol na „TCP“ a číslo portu na to, co chcete použít.

Krok 3 – Přidejte svůj disektor do Wireshark

Právě teď je váš disektor jako žárovka bez elektřiny. Existuje, ale není vám k ničemu, dokud jím neprovedete nějakou sílu. Jinými slovy, váš disektor ještě není přidán do Wireshark, takže jej musíte přidat ručně, abyste jej mohli spustit pomocí těchto kroků:

  1. Klikněte na „Nápověda“ a přejděte do nabídky „O aplikaci Wireshark“.
  2. Vyberte kartu „Složka“ a najděte seznam cest pro váš soubor Lua.
  3. Vyberte „Personal Lua Plugins“. V případě potřeby vytvořte adresář.
  4. Zkopírujte a vložte soubor Lua, který jste vytvořili, do adresáře „Personal Lua Plugins“. Znovu načtěte Wireshark a zapněte disektor.

Je dobré provést test na vašem novém disektoru otevřením některých paketů, které jste zachytili. Wireshark by měl doručit zprávu, která zobrazuje dlouhý název, který jste vybrali pro svůj disektor, spolu s informacemi o typu zprávy (otázka nebo odpověď) a výsledku vaší kontroly.

Nějaký vzorový kód

Pokud jste ještě nevytvořili disektor (nebo jste v Lua noví), Wireshark nabízí praktický příklad disektoru, který si můžete vyzkoušet:

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 zřetězené disektory

Možná budete chtít jít trochu více do hloubky s používáním disektorů, jakmile si osvojíte jejich vytváření v Lua. Wireshark nabízí dva další typy disektorů – postdissectors a chained disectors – které nabízejí více funkcí.

Postdisektor je hodně jako závěrečná kontrola všech disektorů, které jste spustili pro paket. Zaregistrujete jej, abyste dostali upozornění, jakmile Wireshark zavolá každý další disektor, který chcete, aby použil, a můžete jej použít k filtrování sloupců „Protokol“ a „Informace“. Tato funkce je užitečná zejména v případě, že chcete odfiltrovat více paketů v relaci, kde máte dlouhou mezeru mezi datovými sadami a nemůžete si vyvolat každý jednotlivě.

Zřetězení disektorů plní podobnou funkci (alespoň pokud jde o filtrování přes dříve používané disektory), protože vám poskytuje přístup k datům jednoho disektoru. Klíčovou výhodou je, že zřetězený disektor nemusí znovu procházet každý paket, což vám dává výsledek, aniž byste museli čekat, až se znovu spustí původní disektor.

Pitvat v Lua

Vzhledem k tomu, že Wireshark již nabízí možnost vytvářet disektory v C (jeho přirozeném jazyce), možná nevidíte potřebu je vytvářet také v Lua. Přesto ti, kteří nejsou spokojeni s C, stejně jako ti, kteří již Lua zvládli, mohou zjistit, že lehké skriptování Lua usnadňuje vytváření jejich disektorů. Je pravda, že při spuštění procesu musíte vyrovnat delší dobu načítání ve srovnání s disektory na bázi C, ale je užitečné mít tuto možnost bez ohledu na to.

Chceme to slyšet od vás. Jak často ve Wiresharku používáte disektory? Zkoušeli jste je již vytvořit v C a jaké výhody podle vás přináší vytváření disektorů v Lua? Dejte nám vědět v sekci komentářů níže.

Zajímavé Články

Redakce Choice

Jak přidat kresbu alba do iTunes
Jak přidat kresbu alba do iTunes
Pokud se kresba některých vašich skladeb nebo alb iTunes nestáhla správně, možná budete chtít vědět, jak je přidat. V tomto článku se budeme zabývat tím, jak přidat kresbu pro vaše písně nebo alba
Jak skrýt a deaktivovat miniatury na svislých kartách Vivaldi
Jak skrýt a deaktivovat miniatury na svislých kartách Vivaldi
Naučte se, jak skrýt a deaktivovat miniatury na svislých kartách Vivaldi
Jak zobrazit, kolik skladeb máte na Apple Music
Jak zobrazit, kolik skladeb máte na Apple Music
Apple je známý tím, že má jedny z nejlepších softwarových a operačních systémů na světě. Zařízení macOS i iOS mají elegantní rozhraní, rozsáhlé možnosti přizpůsobení a vysokorychlostní výkon. Některé funkce však nejsou tak transparentní a
Najděte uživatelské účty ve WSL Linux ve Windows 10
Najděte uživatelské účty ve WSL Linux ve Windows 10
Tento příspěvek vysvětluje, jak rychle najít uživatelské účty v konzole WSL ve Windows 10. Metoda popsaná v článku je vhodná pro jakékoli distribuce WSL.
Archivy značek: Windows 10 Build 17134
Archivy značek: Windows 10 Build 17134
Archivy značek: Windows 10 build 10532
Archivy značek: Windows 10 build 10532
Stáhněte si panel Personalizace - prémiové funkce přizpůsobení pro Windows 7 Starter a 7 Home Basic
Stáhněte si panel Personalizace - prémiové funkce přizpůsobení pro Windows 7 Starter a 7 Home Basic
Panel přizpůsobení - prvotřídní funkce přizpůsobení pro Windows 7 Starter a 7 Home Basic. Panel přizpůsobení pro Windows 7 Starter? Windows 7 Home Basic přináší prémiové funkce personalizace pro edice Windows 7 nižší třídy. Může obejít omezení a poskytuje užitečné uživatelské rozhraní - stejně jako například v Ultimate Edition. Pokrývá většinu funkcí přizpůsobení