Kot eno najboljših orodij za zajem omrežnih paketov na svetu vam Wireshark omogoča, da pridobite določene podatkovne pakete, tako da jih lahko analizirate brez povezave in v realnem času. O aplikaciji razmišljajte kot o načinu natančnega pregleda podatkov, ki tečejo po vašem omrežju, kar vam omogoča, da odkrijete težave in nepravilnosti.
Če želite analizirati določen del podatkov paketa, lahko uporabite disektorje. Kot pove že ime, ta postopek 'razčleni' kodo, kar vam omogoča, da izrežete določene vidike, ki potrebujejo vašo pozornost. Ta vadnica pojasnjuje, kako ustvariti in uporabljati disektorje v Wiresharku z uporabo skriptnega jezika Lua.
Preden začnete – kaj morate vedeti o disektorjih
Čeprav disektorji ponujajo hiter način za analizo delov podatkovnega paketa v Wiresharku, morajo za učinkovito delovanje slediti nekaterim protokolom. Ti protokoli vključujejo naslednje:
- Vsak disektor, ki ga ustvarite, mora biti registriran za obravnavo določene vrste tovora iz drugega protokola. Če želite dokončati to registracijo, morate svojemu disektorju dodeliti objekt »Proto«, ki ga boste videli spodaj.
- Ko prek Wiresharka pokličete disektor, ta od aplikacije prejme tri stvari:
- Objekt TVB – Medpomnilnik TVB iz podatkovnega paketa.
- Predmet TreeItem – koren drevesa, ki predstavlja eno vozlišče v podatkovnem drevesu.
- Pinfo Object – Zapis podatkov o paketu.
- Dissector lahko pokličete le, če se vaš podatkovni paket ujema z DissectorTable, ki ste ga nastavili za svoj objekt »Proto«.
- Tej zahtevi se lahko izognete tako, da vsilite uporabo disektorja prek funkcije »Decode As«. Toda tudi takrat lahko dissektor vsilite le, če je DissectorTable, ki ste ga nastavili na svoj objekt »Proto«, pravilnega tipa.
Nastavitev vašega disektorja z uporabo LUA
Ker je Wireshark napisan in uporablja programski jezik C, je večina dissektorjev podobno napisana v C. Vendar pa boste morda želeli uporabiti Lua. Ta skriptni jezik je enostavnejši od C in zato bolj dostopen novincem pri kodiranju ali tistim, ki preprosto želijo ustvariti disektor z lažjim jezikom.
Čeprav bo vaša koda enostavnejša, je disektor, ki ga dobite pri uporabi Lua, običajno počasnejši od tistega, ki bi ga ustvarili s C. Kljub temu so to koraki, ki jih morate upoštevati, če želite ustvariti disektor Wireshark z Luo.
1. korak – Nastavite Lua v Wiresharku
Lua boste morali nastaviti, če je še niste uporabljali v Wiresharku:
- Kliknite »Pomoč« in nato »O Wiresharku«.
- Kliknite »Mape«.
- Za ustvarjanje aktivnega skripta Lua izberite eno od naslednjih možnosti:
- Globalni vtičniki Lua
- Osebni vtičniki Lua
- Osebno
Ko ga aktivirate, bo vaš skript pripravljen vsakič, ko zaženete Wireshark. Vsakič, ko spremenite ta skript, morate znova zagnati Wireshark, da registrirate spremembo, ali pritisniti »Ctrl + Shift + L«, da znova naložite vse svoje skripte Lua, da bodo vaše spremembe aktivne.
kako uporabljati pisave po meri v google docs -
2. korak – Osnovni koraki za ustvarjanje vašega disektorja
Če ste že seznanjeni z Luo, lahko uporabite naslednje korake za ustvarjanje lastnega dissector skripta, ki bo deloval v Wiresharku:
- Navedite protokol za svoj disektor, ki zahteva, da nastavite dolgo ime za uporabo v drevesu protokola in kratko ime, ki služi kot ime filtra za prikaz disektorja.
- Ustvarite naslednja tri polja z ustreznimi vrstami:
- Vprašanje – prikaže vrsto vprašanja.
- Odgovor – prikaže vrsto odgovora.
- MessageType – Prikazuje, ali vaš paket zahteva vprašanje ali odgovor.
- Registrirajte svoja polja, da bo Wireshark vedel, kako jih prikazati. Brez registriranih polj boste prejeli sporočilo »Napaka Lua«, ki vam običajno pove, da je vaše ProtoField elementa drevesa neveljavno.
- Ustvarite funkcijo disekcije, ki vključuje prej omenjeni Pinfo (ki vsebuje podatke o vašem paketu) in Tree Item (ustvarjanje drevesa, ki ga boste dodali poddrevesu). Prav tako morate ustvariti »medpomnilnik«, ki se nahaja na vrhu vašega TCP.
- Določite tako protokol kot vrata, za katera mora Wireshark uporabljati disektor. Na primer, lahko nastavite protokol na »TCP« in številko vrat na tisto, kar želite uporabiti.
3. korak – dodajte svoj Dissector v Wireshark
Trenutno je tvoj disektor kot žarnica brez elektrike. Obstaja, vendar vam ne koristi, dokler skozenj ne preženete moči. Z drugimi besedami, vaš disektor še ni dodan v Wireshark, zato ga morate dodati ročno, da se bo zagnal po teh korakih:
- Kliknite »Pomoč« in pojdite v meni »O Wiresharku«.
- Izberite zavihek »Mapa«, da poiščete seznam poti za datoteko Lua.
- Izberite »Osebni vtičniki Lua«. Po potrebi ustvarite imenik.
- Kopirajte in prilepite datoteko Lua, ki ste jo ustvarili, v imenik »Personal Lua Plugins«. Ponovno naložite Wireshark, da vklopite disektor.
Dobro je, da na svojem novem disektorju izvedete preizkus tako, da odprete nekaj paketov, ki ste jih zajeli. Wireshark bi moral dostaviti sporočilo, ki prikazuje dolgo ime, ki ste ga izbrali za svoj disektor, skupaj z informacijami o vrsti sporočila (vprašanje ali odgovor) in rezultatom vašega preverjanja.
naj kupim vstopnice pri stubhubu
Nekaj vzorčne kode
Če še niste ustvarili disektorja (ali ste novi v Lui), Wireshark ponuja priročen primer disektorja, ki ga lahko preizkusite:
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)
Postdisektorji in verižni disektorji
Ko boste obvladali njihovo ustvarjanje v Lui, se boste morda želeli malce bolj poglobiti v uporabo svojega disektorja. Wireshark ponuja dve dodatni vrsti disektorjev – postdisektorje in verižne disektorje – ki nudita več funkcionalnosti.
Postdissektor je zelo podoben končnemu pregledu vseh dissektorjev, ki ste jih zagnali za paket. Registrirate ga, da prejmete obvestilo, ko Wireshark pokliče vse druge dissektorje, ki jih želite uporabiti, in ga lahko uporabite za filtriranje stolpcev »Protokol« in »Informacije«. Ta funkcija je še posebej uporabna, če želite filtrirati več paketov v seji, kjer ste imeli dolgo vrzel med nizi podatkov in ne morete priklicati vsakega posebej.
Verižni disektorji služijo podobni funkciji (vsaj v smislu filtriranja skozi prej uporabljene disektorje), saj vam omogočajo dostop do podatkov enega samega disektorja. Ključna prednost pri tem je, da verižnemu disektorju ni treba znova teči skozi vsak paket, kar vam daje rezultat, ne da bi morali čakati, da se prvotni disektor znova zažene.
Secirajte v Lui
Glede na to, da Wireshark že ponuja možnost ustvarjanja disektorjev v C (njegovem naravnem jeziku), morda ne boste videli potrebe, da bi jih ustvarili tudi v Lua. Kljub temu bodo tisti, ki jim C ni najbolj všeč, pa tudi tisti, ki so že obvladali Lua, morda ugotovili, da lahkotno skriptiranje Lua olajša ustvarjanje njihovih disektorjev. Res je, da morate pri izvajanju postopka zamenjati daljši čas nalaganja v primerjavi z disektorji na osnovi C, vendar je koristno imeti to možnost ne glede na to.
S tem povedanim želimo slišati vaše mnenje. Kako pogosto uporabljate disektorje v Wiresharku? Ali ste jih že poskusili ustvariti v C in kakšne prednosti po vašem mnenju prinaša izdelava disektorjev v Lui? Sporočite nam v spodnjem oddelku za komentarje.