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 Discord Audio op te nemen
Hoe Discord Audio op te nemen
Discord is al enkele jaren een favoriet virtueel ontmoetingsplatform voor veel gemeenschappen. Oorspronkelijk uitsluitend gebruikt door gamers, heeft deze plek veel voordelen die het perfect maken voor chatten en het uitwisselen van meningen met mensen die van de
Hoe alle e-mails in Outlook te verwijderen
Hoe alle e-mails in Outlook te verwijderen
Met miljoenen gebruikers over de hele wereld is Outlook een van de meest populaire e-mailclients die er zijn. De reden hiervoor is dat het zoveel meer is dan een e-mailplatform. Er zijn veel opties voor het organiseren van de
Backup Task Manager-instellingen in Windows 10
Backup Task Manager-instellingen in Windows 10
Het is mogelijk om een ​​back-up te maken van de instellingen van de Task Manager om ze over te zetten naar een andere gebruikersaccount of Windows 10-pc.
Hoe Wyze Camera te verbinden met nieuwe wifi
Hoe Wyze Camera te verbinden met nieuwe wifi
Hoewel Wyze Camera-apparaten geweldig zijn, zijn sommige instructies voor hun installatie niet zo duidelijk. Een Wyze-camera verbinden met een nieuwe wifi is een van die grijze gebieden. Er is niet veel informatie over deze common
Hoe u kunt vinden welke gebruiker een proces uitvoert in Windows 10
Hoe u kunt vinden welke gebruiker een proces uitvoert in Windows 10
Zoals u wellicht al weet, is Windows 10 een besturingssysteem voor meerdere gebruikers. Vandaag zullen we zien hoe u kunt achterhalen welk gebruikersaccount een proces uitvoert in Windows 10.
Hoe een profiel op Hulu te verwijderen
Hoe een profiel op Hulu te verwijderen
U hoeft niet door hoepels te springen om een ​​Hulu-profiel te verwijderen. Leer hoe u eenvoudig een Hulu-profiel kunt verwijderen op uw pc, Mac, smartphone en meer.
Hoe u uw nettowaarde in het spel in Dota 2 kunt controleren
Hoe u uw nettowaarde in het spel in Dota 2 kunt controleren
Dota 2 is een zeer complexe en opwindende game. Ervaren gamers genieten meestal van de complexe mechanica van Dota, maar ze kunnen frustrerend zijn voor de nieuwere spelers. Het eigen vermogen is een van die ingewikkelde dingen. Het is de totale goudwaarde