Vigtigste Andet Sådan bruges Lua Dissector i Wireshark

Sådan bruges Lua Dissector i Wireshark



Som et af verdens bedste netværkspakkefangstværktøjer giver Wireshark dig mulighed for at opnå specifikke datapakker, så du kan analysere dem både offline og i realtid. Tænk på appen som en måde at nøje undersøge de data, der strømmer gennem dit netværk, så du kan fange problemer og uregelmæssigheder.

  Sådan bruges Lua Dissector i Wireshark

Du kan bruge dissektører, hvis du vil analysere en bestemt del af en pakkes data. Som navnet antyder, 'dissikerer' denne proces koden, så du kan skære visse aspekter ud, som kræver din opmærksomhed. Denne vejledning forklarer, hvordan man opretter og bruger dissektorer i Wireshark ved hjælp af Lua-scriptsproget.

Før du starter – hvad du behøver at vide om dissektorer

Selvom dissektorer tilbyder en hurtig måde at analysere dele af en datapakke i Wireshark på, skal de følge nogle protokoller for at fungere effektivt. Disse protokoller omfatter følgende:

  • Hver dissektor, du opretter, skal registreres for at håndtere en bestemt type nyttelast fra en anden protokol. For at fuldføre denne registrering skal du tildele et 'Proto'-objekt til din dissektor, som du kan se nedenfor.
  • Når du ringer til en dissektor via Wireshark, modtager den tre ting fra appen:
    • TVB-objekt – En TVB-buffer fra datapakken.
    • TreeItem Object – En trærod, der repræsenterer en enkelt node i et datatræ.
    • Pinfo Object – En pakkeinformationspost.
  • Du kan kun kalde en dissektor, hvis din datapakke matcher den DissectorTable, som du indstiller til dit 'Proto'-objekt.
    • Du kan omgå dette krav ved at tvinge brugen af ​​en dissektor via funktionen 'Decode As'. Men selv da kan du kun tvinge dissektoren, hvis den DissectorTable, du indstiller til dit 'Proto'-objekt, er af den korrekte type.

Opsætning af din dissektor ved hjælp af LUA

Da Wireshark både er skrevet i og bruger programmeringssproget C, er de fleste dissektorer på samme måde skrevet i C. Du kan dog ønske at bruge Lua. Dette scriptsprog er enklere end C og dermed mere tilgængeligt for nytilkomne kodning eller dem, der blot ønsker at oprette en dissektor ved hjælp af et mere letvægtssprog.

Selvom din kode vil være enklere, er den dissektor, du får, når du bruger Lua, normalt langsommere end den, du ville oprette ved hjælp af C. Ikke desto mindre er disse trin, du skal følge, hvis du vil oprette en Wireshark-dissektor ved hjælp af Lua.

Trin 1 – Konfigurer Lua i Wireshark

Du skal konfigurere Lua, hvis du ikke har brugt det i Wireshark før:

  1. Klik på 'Hjælp' efterfulgt af 'Om Wireshark.'
  2. Klik på 'Mapper'.
  3. Vælg et af følgende for at oprette et aktivt Lua-script:
    • Globale Lua-plugins
    • Personlige Lua-plugins
    • Personlig

Når det er aktiveret, vil dit script være klar, når du starter Wireshark. Hver gang du foretager en ændring af det script, skal du enten genstarte Wireshark for at registrere ændringen eller trykke på 'Ctrl + Shift + L' for at genindlæse alle dine Lua-scripts for at gøre dine ændringer aktive.

hvordan man ser hvilken ram jeg har windows 10

Trin 2 – De grundlæggende trin til oprettelse af din dissektor

Hvis du allerede er bekendt med Lua, kan du bruge følgende trin til at oprette dit eget dissektorscript, der fungerer i Wireshark:

  • Deklarer protokollen for din dissektor, hvilket kræver, at du indstiller både et langt navn til brug i protokoltræet og et kort navn, der fungerer som dissektorens displayfilternavn.
    • Opret følgende tre felter med deres passende typer:
    • Spørgsmål – Viser spørgsmålstypen.
    • Svar – Viser svartypen.
  • MessageType – Demonstrerer, om din pakke anmoder om et spørgsmål eller et svar.
  • Registrer dine felter, så Wireshark ved, hvordan de skal vises. Uden registrerede felter vil du modtage en 'Lua Error'-meddelelse, der normalt fortæller dig, at dit Tree Item ProtoField er ugyldigt.
  • Opret en dissektionsfunktion, der inkluderer den tidligere nævnte Pinfo (indeholder data om din pakke) og Tree Item (opretter det træ, du vil tilføje til et undertræ). Du skal også oprette en 'buffer', som sidder oven på din TCP.
  • Angiv både protokol og port, som Wireshark skal bruge dissektoren til. For eksempel kan du indstille protokollen til 'TCP' og portnummeret til det, du vil bruge.

Trin 3 – Tilføj din dissektor til Wireshark

Lige nu er din dissektor som en pære uden elektricitet. Det findes, men det nytter ikke dig, før du kan køre noget strøm igennem det. Med andre ord er din dissektor ikke tilføjet til Wireshark endnu, så du skal tilføje den manuelt for at få den til at køre ved at bruge disse trin:

  1. Klik på 'Hjælp' og gå til menuen 'Om Wireshark'.
  2. Vælg fanen 'Mappe' for at finde en liste over stier til din Lua-fil.
  3. Vælg 'Personlige Lua-plugins.' Opret en mappe, hvis det er nødvendigt.
  4. Kopier og indsæt den Lua-fil, du oprettede, i mappen 'Personal Lua Plugins'. Genindlæs Wireshark for at tænde for dissektoren.

Det er en god idé at køre en test på din nye dissektor ved at åbne nogle af de pakker, du har fanget. Wireshark skal levere en besked, der viser det lange navn, du har valgt til din dissektor, sammen med oplysninger om meddelelsestypen (spørgsmål eller svar) og resultatet af din kontrol.

Nogle prøvekode

Hvis du ikke har oprettet en dissektor før (eller du er ny til Lua), Wireshark tilbyder et praktisk eksempeldissektor, som du kan prøve:

hvordan man slår igennem i Gmail
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)

Postdissektorer og kædede dissektorer

Du vil måske gå lidt mere i dybden med dit dissektorbrug, når du har mestret at skabe dem i Lua. Wireshark tilbyder yderligere to typer dissektorer – postdissektorer og kædede dissektorer – der tilbyder mere funktionalitet.

En postdissektor ligner meget en sidste kontrol af alle dissektorer, som du har kørt for en pakke. Du registrerer den for at få besked, når Wireshark har ringet til hver anden dissektor, du vil have den til at bruge, og du kan bruge den til at filtrere kolonnerne 'Protokol' og 'Info'. Denne funktion er især nyttig, hvis du vil bortfiltrere flere pakker i en session, hvor du har haft et langt mellemrum mellem datasæt og ikke kan huske hver enkelt individuelt.

At kæde dissektorer tjener en lignende funktion (i det mindste med hensyn til at filtrere gennem tidligere brugte dissektorer) ved at give dig adgang til en enkelt dissektors data. Den vigtigste fordel her er, at den kædede dissektor ikke behøver at køre gennem hver pakke igen, hvilket giver dig et resultat uden at tvinge dig til at vente på, at den originale dissektor kører igen.

Dissekere i Lua

I betragtning af at Wireshark allerede tilbyder muligheden for at oprette dissektorer i C (dets naturlige sprog), kan du muligvis ikke se behovet for også at oprette dem i Lua. Alligevel kan de, der ikke er fortrolige med C, såvel som dem, der allerede har mestret Lua, finde ud af, at Luas lette scripting gør det lettere at skabe deres dissektører. Indrømmet, du er nødt til at udligne en længere indlæsningstid, når du kører processen sammenlignet med C-baserede dissektorer, men det er nyttigt at have muligheden uanset.

Når det er sagt, vil vi gerne høre fra dig. Hvor ofte bruger du dissektorer i Wireshark? Har du prøvet at oprette dem i C før, og hvilke fordele tror du, det giver at lave dissektorer i Lua? Fortæl os det i kommentarfeltet nedenfor.

Interessante Artikler