Hoofd Ander Lua Dissector gebruiken in Wireshark

Lua Dissector gebruiken in Wireshark



Als een van 's werelds beste tools voor het vastleggen van netwerkpakketten, stelt Wireshark u in staat om specifieke datapakketten te verkrijgen, zodat u deze zowel offline als in realtime kunt analyseren. Beschouw de app als een manier om de gegevens die door uw netwerk stromen nauwkeurig te onderzoeken, zodat u problemen en onregelmatigheden kunt opsporen.

achtergrondafbeelding toevoegen aan google doc
  Lua Dissector gebruiken in Wireshark

U kunt dissectoren gebruiken als u een specifiek deel van de gegevens van een pakket wilt analyseren. Zoals de naam al aangeeft, 'ontleedt' dit proces de code, waardoor u bepaalde aspecten kunt verwijderen die uw aandacht nodig hebben. In deze zelfstudie wordt uitgelegd hoe u dissectors kunt maken en gebruiken in Wireshark met behulp van de Lua-scripttaal.

Voordat u begint - Wat u moet weten over dissectoren

Hoewel dissectors een snelle manier bieden om delen van een datapakket in Wireshark te analyseren, moeten ze een aantal protocollen volgen om effectief te werken. Deze protocollen omvatten het volgende:

  • Elke dissector die u maakt, moet worden geregistreerd om een ​​bepaald type payload van een ander protocol te verwerken. Om deze registratie te voltooien, moet u een 'Proto' -object aan uw dissector toewijzen, dat u hieronder zult zien.
  • Wanneer je een dissector belt via Wireshark, ontvangt deze drie dingen van de app:
    • TVB-object - Een TVB-buffer van het datapakket.
    • TreeItem-object - Een boomwortel die een enkel knooppunt in een gegevensboom vertegenwoordigt.
    • Pinfo-object - Een pakketinformatierecord.
  • U kunt alleen een dissector aanroepen als uw datapakket overeenkomt met de DissectorTable die u hebt ingesteld op uw 'Proto' -object.
    • U kunt deze vereiste omzeilen door het gebruik van een dissector af te dwingen via de functie 'Decoderen als'. Maar zelfs dan kun je de dissector alleen forceren als de DissectorTable die je hebt ingesteld voor je 'Proto'-object van het juiste type is.

Uw dissector instellen met LUA

Aangezien Wireshark zowel is geschreven in als de programmeertaal C gebruikt, zijn de meeste dissectors op dezelfde manier geschreven in C. U kunt echter Lua gebruiken. Deze scripttaal is eenvoudiger dan C en dus toegankelijker voor codeernieuwkomers of degenen die gewoon een dissector willen maken met een lichtere taal.

Hoewel uw code eenvoudiger zal zijn, is de dissector die u krijgt bij het gebruik van Lua meestal langzamer dan degene die u zou maken met C. Desalniettemin zijn dit de stappen die u moet volgen als u een Wireshark-dissector wilt maken met Lua.

Stap 1 - Lua instellen in Wireshark

Je moet Lua instellen als je het nog niet eerder in Wireshark hebt gebruikt:

hoe iemand op Facebook op iPhone te deblokkeren?
  1. Klik op 'Help', gevolgd door 'Over Wireshark'.
  2. Klik op 'Mappen'.
  3. Kies een van de volgende opties om een ​​actief Lua-script te maken:
    • Wereldwijde Lua-plug-ins
    • Persoonlijke Lua-plug-ins
    • Persoonlijk

Eenmaal geactiveerd, is uw script klaar wanneer u Wireshark start. Telkens wanneer u een wijziging in dat script aanbrengt, moet u Wireshark opnieuw opstarten om de wijziging te registreren of op 'Ctrl + Shift + L' drukken om al uw Lua-scripts opnieuw te laden om uw wijzigingen actief te maken.

Stap 2 - De basisstappen voor het maken van uw dissector

Als je al bekend bent met Lua, kun je de volgende stappen gebruiken om je eigen dissector-script te maken dat werkt in Wireshark:

  • Declareer het protocol voor uw dissector, waarvoor u zowel een lange naam moet instellen voor gebruik in de protocolstructuur als een korte naam die dient als de weergavefilternaam van de dissector.
    • Maak de volgende drie velden aan, met de juiste typen:
    • Vraag – Toont het vraagtype.
    • Antwoord – Toont het antwoordtype.
  • MessageType – Laat zien of uw pakket om een ​​vraag of een antwoord vraagt.
  • Registreer uw velden zodat Wireshark weet hoe ze moeten worden weergegeven. Zonder geregistreerde velden ontvangt u een 'Lua Error'-bericht, meestal met de mededeling dat uw Tree Item ProtoField ongeldig is.
  • Maak een dissectiefunctie die de eerder genoemde Pinfo (met gegevens over uw pakket) en Tree Item (de boom maakt die u aan een substructuur toevoegt) bevat. U moet ook een 'buffer' maken die bovenop uw TCP zit.
  • Specificeer zowel het protocol als de poort waarvoor Wireshark de dissector moet gebruiken. U kunt bijvoorbeeld het protocol instellen op 'TCP' en het poortnummer op wat u maar wilt gebruiken.

Stap 3 - Voeg uw dissector toe aan Wireshark

Op dit moment is je dissector als een gloeilamp zonder elektriciteit. Het bestaat, maar je hebt er niets aan totdat je er wat kracht doorheen kunt laten stromen. Met andere woorden, uw dissector is nog niet toegevoegd aan Wireshark, dus u moet deze handmatig toevoegen om deze te laten werken door deze stappen te volgen:

  1. Klik op 'Help' en ga naar het menu 'Over Wireshark'.
  2. Selecteer het tabblad 'Map' om een ​​lijst met paden voor uw Lua-bestand te vinden.
  3. Kies 'Persoonlijke Lua-plug-ins'. Maak eventueel een directory aan.
  4. Kopieer en plak het Lua-bestand dat u hebt gemaakt in de map 'Personal Lua Plugins'. Herlaad Wireshark om de dissector aan te zetten.

Het is een goed idee om een ​​test uit te voeren op je nieuwe dissector door enkele van de pakketten te openen die je hebt vastgelegd. Wireshark zou een bericht moeten afleveren met de lange naam die u voor uw dissector hebt gekozen, samen met informatie over het berichttype (vraag of antwoord) en het resultaat van uw controle.

Een voorbeeldcode

Als je nog niet eerder een dissector hebt gemaakt (of Lua nieuw voor je is), Wireshark biedt een handig voorbeeld dissector om uit te proberen:

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)

Postdissectoren en geketende dissectoren

Misschien wil je wat dieper ingaan op je dissectorgebruik als je eenmaal onder de knie hebt om ze in Lua te maken. Wireshark biedt twee extra soorten dissectoren - postdissectors en geketende dissectors - die meer functionaliteit bieden.

Een postdissector lijkt veel op een laatste controle van alle dissectoren die je voor een pakket hebt uitgevoerd. U registreert het om op de hoogte te worden gesteld zodra Wireshark elke andere dissector heeft gebeld die u wilt gebruiken, en u kunt het gebruiken om de kolommen 'Protocol' en 'Info' te filteren. Deze functie is vooral handig als u meerdere pakketten wilt filteren in een sessie waarin er een lange kloof tussen datasets zit en u ze niet allemaal afzonderlijk kunt oproepen.

hoe dubbele monitoren met laptop in te stellen

Het koppelen van dissectoren heeft een vergelijkbare functie (althans in termen van filteren door eerder gebruikte dissectoren) door u toegang te geven tot de gegevens van een enkele dissector. Het belangrijkste voordeel hier is dat de geketende dissector niet opnieuw door elk pakket hoeft te lopen, waardoor u een resultaat krijgt zonder dat u hoeft te wachten tot de oorspronkelijke dissector opnieuw wordt uitgevoerd.

Ontleden in Lua

Aangezien Wireshark al de mogelijkheid biedt om dissectoren in C (zijn natuurlijke taal) te maken, zie je misschien niet de noodzaak om ze ook in Lua te maken. Toch zullen degenen die niet vertrouwd zijn met C, evenals degenen die Lua al onder de knie hebben, merken dat de lichtgewicht scripting van Lua het gemakkelijker maakt om hun dissectors te creëren. Toegegeven, je moet een langere laadtijd inruilen wanneer je het proces uitvoert in vergelijking met C-gebaseerde dissectoren, maar het is toch handig om de optie te hebben.

Met dat gezegd, willen we van u horen. Hoe vaak gebruikt u dissectoren in Wireshark? Heb je al eerder geprobeerd ze in C te maken en welke voordelen denk je dat het maken van dissectors in Lua oplevert? Laat het ons weten in de comments hieronder.

Interessante Artikelen

Editor'S Choice

Hoe u de resolutie op uw tv kunt wijzigen
Hoe u de resolutie op uw tv kunt wijzigen
Resolutie kan de weergavekwaliteit van uw tv veranderen, dus het veranderen ervan kan zorgen voor een betere kijkervaring. Probeer deze eenvoudige stappen.
Zijn de Nintendo 3DS en 3DS XL achterwaarts compatibel?
Zijn de Nintendo 3DS en 3DS XL achterwaarts compatibel?
De Nintendo 3DS en 3DS XL zijn achterwaarts compatibel, wat betekent dat beide systemen vrijwel elk Nintendo DS-spel en zelfs Nintendo DSi-titels kunnen spelen.
Magix Movie Edit Pro 11 recensie
Magix Movie Edit Pro 11 recensie
Magix is ​​vooral bekend om zijn apps voor audiomanipulatie en fotobewerking, maar het heeft ook al lang videobewerking in zijn portfolio. Inderdaad, Movie Edit Pro is nu op versie 11, waardoor het een behoorlijk oude timer is. Niettemin,
Hoe u Microsoft 365 op uw pc installeert
Hoe u Microsoft 365 op uw pc installeert
Leer hoe u Microsoft 365 op uw pc en andere apparaten installeert. Met de Home editie deel je Microsoft 365 bovendien met 5 leden van je huishouden.
Wat is een C-bestand?
Wat is een C-bestand?
Een C is een C/C++ broncodebestand. Leer hoe u een .C-bestand opent of een C-bestand naar een ander bestandsformaat converteert.
Hoe je dit kunt oplossen als Instagram niet werkt
Hoe je dit kunt oplossen als Instagram niet werkt
Er zijn veel redenen waarom je problemen zou kunnen hebben met Instagram. Gebruik deze tips voor probleemoplossing om ze op te lossen.
Oppo A37 – Ontvangt geen oproepen – Wat te doen?
Oppo A37 – Ontvangt geen oproepen – Wat te doen?
Als je geen inkomende oproepen op je Oppo A37 kunt ontvangen, moet je niet in paniek raken. Er is meestal een heel eenvoudige reden en dus ook een eenvoudige oplossing voor dit probleem. Veel mensen zetten bijvoorbeeld per ongeluk een van de