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

Váš ovladač PS5 DualSense bude brzy znít a sdílet lépe
Váš ovladač PS5 DualSense bude brzy znít a sdílet lépe
Sony spouští beta verzi, která vám poskytne lepší zvuk z ovladače DualSense vašeho PS5 a více interaktivních funkcí, když sledujete obrazovku PS5 kamaráda.
Chrome blokuje rušivé videoreklamy
Chrome blokuje rušivé videoreklamy
Od 5. srpna 2020 obsahuje Google Chrome aktualizovanou funkci blokování obsahu, která blokuje rušivé reklamy. Při rozhodování o tom, které reklamy nejvíce narušují web, Google spoléhá na standardy Better Ads Standards. Standardy Better Ads Standards jsou vyvíjeny skupinou Coalition for Better Ads. Byl vytvořen významnými mezinárodními subjekty
Jaký je rozdíl mezi Throwback Thursday a Flashback Friday?
Jaký je rozdíl mezi Throwback Thursday a Flashback Friday?
Pokud jste na sociálních sítích, pravděpodobně jste viděli hashtagy #ThrowbackThursday a #FlashbackFriday. Jaký je mezi nimi rozdíl?
Jak někoho ztlumit na Instagramu, Facebooku a Twitteru, aniž by o tom věděl
Jak někoho ztlumit na Instagramu, Facebooku a Twitteru, aniž by o tom věděl
Nikdo nemá rád hassledování na sociálních médiích. Tam přijde vhod naučit se umlčovat lidi na sociálních médiích, místo aby je blokovali. Nežádoucí obsah můžete vyloučit, aniž byste nahlášili urážejícího uživatele, že se naštval
Jak vymazat mezipaměť na Facebooku
Jak vymazat mezipaměť na Facebooku
Vymazání mezipaměti Facebooku v aplikaci nebo ve webovém prohlížeči je rychlé, snadné a může zlepšit výkon. Zde je návod, jak vymazat soubor mezipaměti.
Zapomněli jste heslo k Apple ID? Zde je návod, jak se zotavit
Zapomněli jste heslo k Apple ID? Zde je návod, jak se zotavit
Mnoho míst, která na internetu navštěvujeme, vyžaduje, abychom měli přihlašovací údaje, abychom je mohli zadat. A když je potřeba tolik hesel, je normální na některá z nich zapomenout. Například heslo Apple ID není nic
Jak povolit režim Letadlo v systému Windows 10
Jak povolit režim Letadlo v systému Windows 10
Zde je návod, jak povolit režim Letadlo v systému Windows 10. Pokrývá všechny možné způsoby, včetně Nastavení, Centra akcí a plovoucí nabídky Síť.