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

Recenze Half-Life 2: Episode One
Recenze Half-Life 2: Episode One
Ah, Half-Life: jediný herní vesmír, na který nikdo nikdy nemá špatné slovo. A není žádným překvapením, s lepším hlasovým projevem, lepší zápletkou, lepší grafikou a herním enginem a lepší hratelností než kterákoli jiná
Jak přidat text do Fotek Google
Jak přidat text do Fotek Google
Fotky Google nabízejí neomezené úložiště a jsou vhodné pro nenáročné úpravy videa a obrázků. Svítí však, pokud jde o vytváření, správu a sdílení vašich alb. Jednou z věcí, kterou můžete udělat, je přidat text
Jak skrýt oznamovací oblast v systému Windows 10 (systémová lišta)
Jak skrýt oznamovací oblast v systému Windows 10 (systémová lišta)
Když je povolen režim tabletu, Windows 10 již skrývá oznamovací oblast. Tento příspěvek vysvětluje, jak skrýt systémový panel v běžném režimu plochy.
Co je uzel v počítačové síti?
Co je uzel v počítačové síti?
Existuje několik druhů uzlů, ale v kontextu domácí nebo podnikové sítě může být uzlem stolní počítač, směrovač, přepínač, rozbočovač nebo tiskárna.
Jak získat absolutní hodnotu v aplikaci Excel
Jak získat absolutní hodnotu v aplikaci Excel
Poté, co jste strávili nějaký čas v aplikaci Excel, vás možná zajímá, jestli je v aplikaci Excel funkce absolutní hodnoty. Naštěstí existuje. Absolutní hodnota čísla je, jak daleko je od nuly. Absolutní hodnota tedy je
Pixel 3 vs iPhone Xs: Který vlajkový smartphone byste si měli koupit?
Pixel 3 vs iPhone Xs: Který vlajkový smartphone byste si měli koupit?
Nyní společnost Google oficiálně oznámila svůj Pixel 3, který je v patách iPhonu Xs od Apple, a každý se zajímá, které z těchto vlajkových telefonů jsou nejlepší. Pixel 3, který byl ohlášen na akci Google Made by Google, je &
Vivaldi uvádí na trh čtečku pošty, kalendáře a RSS
Vivaldi uvádí na trh čtečku pošty, kalendáře a RSS
Vivaldi, nejinovativnější prohlížeč založený na chromu, má spoustu nových funkcí. Stejně jako klasický prohlížeč Opera má Vivaldi nyní komponenty Mail, Calendar a Feed Reader. Jsou již k dispozici v dnešním vydání technického náhledu. Reklama Oficiální oznámení uvádí. Tento snímek je začátkem technických náhledů Vivaldi Mail, Calendar a RSS & # x1f389; & # x1f388; & # x1f973 ;.