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

Viz Aktivní plán napájení ve Windows 10
Viz Aktivní plán napájení ve Windows 10
Dnes uvidíme, jak rychle najít aktivní plán napájení, který se aktuálně používá v systému Windows 10. Plán napájení v systému Windows je sada možností napájení systému
Změňte barvu neaktivních pruhů záhlaví ve Windows 10
Změňte barvu neaktivních pruhů záhlaví ve Windows 10
Chcete-li upravit barvu neaktivních pruhů záhlaví ve Windows 10, musíte použít jednoduché vylepšení registru.
Kdy váš telefon dostane aktualizaci Android 6 Marshmallow od Googlu
Kdy váš telefon dostane aktualizaci Android 6 Marshmallow od Googlu
Google oznámil, že od 5. října začne zavádět Android 6 Marshmallow do svých zařízení Nexus. Zatímco Nexus 5X a Nexus 6P budou spuštěny s Marshmallow naplněnými uvnitř, Google aktualizuje Nexus 5, 6,
Opravit chybu Tato aplikace byla z důvodu vaší ochrany ve Windows 10 zablokována
Opravit chybu Tato aplikace byla z důvodu vaší ochrany ve Windows 10 zablokována
Chcete-li zabránit zobrazování zprávy Tato aplikace byla z důvodu vaší ochrany ve Windows 10 zablokována a nainstalujte požadovanou aplikaci, postupujte podle těchto pokynů.
Jak poslat fotografie e-mailem ze zařízení iPhone nebo Android
Jak poslat fotografie e-mailem ze zařízení iPhone nebo Android
Už vás nebaví aplikace třetích stran komprimovat fotografie, které se pokoušíte odeslat e-mailem? Přestože zpráva může na vaší straně vypadat dobře, aplikace zkomprimovala vaše soubory a příjemce dostává obrázky nízké kvality. Naštěstí,
Obnovte aplikaci Windows Security ve Windows 10
Obnovte aplikaci Windows Security ve Windows 10
Jak resetovat aplikaci Zabezpečení Windows v systému Windows 10 Nedávná verze systému Windows 10 přichází s novou aplikací nazvanou Zabezpečení systému Windows. Aplikace, dříve známá jako „Windows Defender Dashboard“ a „Windows Defender Security Center“, byla vytvořena, aby pomohla uživateli jasným a užitečným způsobem ovládat nastavení zabezpečení a ochrany osobních údajů.
Jak změnit tapetu na OnePlus 6
Jak změnit tapetu na OnePlus 6
OnePlus 6, uzavřený ve skle, vypadá opravdu elegantně a cool, takže není divu, že byste chtěli změnit jeho tapetu. I když výrobci smartphonů opravdu dělají maximum, pokud jde o obrázky šablon, s vlajkovým modelem