Kako prolazi jedan zahtev
- Ulaz: Snimak u .pcapng formatu
- Orkestracija: Pyshark, preko Wireshark-ovog tshark-a - Pyshark, Wireshark
- Paralelno
- Aplikativni protokoli - HTTP, HTTPS, DNS, FTP, SMTP
- Transport i kontrola - TCP, UDP, ICMP, ARP
- Adresiranje - IP, Ethernet
- Izlaz: Po jedan red za svaki paket - Otvara se u stablo i ulazi u grafikone - Tkinter, Matplotlib
Pregled
Rad obrađuje kako se analizira mrežni saobraćaj i zašto je PCAP postao standardni format za to. Aplikacija to primenjuje u praksi: otvori se snimak, a ona pokaže šta svaki paket nosi, protokol po protokol.
Ispod svega radi Wireshark: Pyshark pokreće njegov tshark, i zato parser razume toliko protokola. Aplikacija nad tim proverava svaki paket po istom skupu pravila i sve rezultate slaže na jedno mesto, što je korisno kada se nešto traži, a još se ne zna u kom je paketu.
Tehnologije
- Interfejs
- PythonTkinter
- Čitanje snimka
- PysharkWireshark
- Grafikoni
- Matplotlib
Arhitektura
Snimak se čita jednom
Dijalog prima .pcapng ili .pcap, Pyshark ga otvara i svi paketi se učitaju u listu u memoriji pre nego što se fajl zatvori. Fajl se posle toga više ne čita, pa su filteri brzi: izvršavaju se nad listom, bez ponovnog parsiranja snimka.
Svaki paket se čita sloj po sloj
Imena protokola se uzimaju iz slojeva samog paketa, a ne iz neke tabele, pa paket pokazuje ono što stvarno sadrži, a statistika na kraju broji stvarne slojeve. Zatim se redom izvršava dvanaest ekstraktora, i svaki prvo proveri da li je njegov protokol prisutan.
Svaki ekstraktor proverava pre čitanja
Ako paket nema neko polje, to nije greška nego normalan slučaj, pa svaki ekstraktor proveri da li atribut postoji i preskoči ono čega nema. Zato stablo nije ujednačeno: jedan HTTP paket ima desetak polja, sledeći dva, i oba su ispravna.
Ono što ide kao čist tekst, tako se i prikazuje
HTTP Basic kredencijali su samo base64, bez šifrovanja, pa ih ekstraktor dekodira. FTP šalje korisničko ime i lozinku kao običan tekst, pa se i oni prikažu. To je demonstracija koja je radu trebala: umesto tvrdnje da su ti protokoli nesigurni, dekodirana lozinka stoji u stablu.
Rezultati u stablu i na grafikonima
Svaki paket postaje jedan red - vreme, izvorna i odredišna IP adresa, dužina, lista protokola - koji se otvara u čvor za svaki protokol i list za svako polje. Isti prolaz vraća i broj pojavljivanja svakog protokola, koji Matplotlib crta kao kružni i stubičasti grafikon, direktno u prozoru.
Šta radi
Dvanaest protokola za svaki paket
HTTP, HTTPS, DNS, FTP, SMTP, ARP, ICMP, IP, Ethernet, TCP, UDP i FPP, svaki sa svojim ekstraktorom i svojim skupom polja.
Filteri po pet kriterijuma
Opseg datuma i vremena, izvorna IP adresa, odredišna IP adresa i lista protokola razdvojena zapetama. Prazno vreme znači ceo dan, od 00:00:00 do 23:59:59.
Stablo umesto zida teksta
Paket, pa protokol, pa polje, a svaki nivo se otvara tek na klik, pa i snimak sa hiljadama paketa ostaje pregledan.
Raspodela protokola na prvi pogled
Kružni grafikon za udeo i stubičasti grafikon za broj, ponovo iscrtani posle svakog filtera, pa se vidi šta je filter izbacio.
Kredencijali u čistom tekstu
Dekodirani HTTP Basic kredencijali i FTP korisnička imena i lozinke, što je najkraći argument protiv toga da se ti protokoli koriste bez šifrovanja.
Oba PCAP formata
Dijalog prima .pcapng i .pcap. Noviji format nosi više metapodataka i više interfejsa, a čita se kroz isti kod.
Šta sam naučio
Aplikacija radi sa bilo kojim snimkom zato što nijedno polje ne podrazumeva. Paket ne garantuje koja polja nosi, pa je svako čitanje zaštićeno, a polje koje nedostaje je normalan slučaj, ne greška. U dvanaest zasebno napisanih ekstraktora to je svuda eksplicitno, pa snimak sa dva paketa i snimak sa dve hiljade prolaze kroz isti kod, bez ijednog posebnog slučaja.
Zato što se snimak čita samo jednom, sve ostalo radi odmah. Svaki filter, svako prebrojavanje i svaki novi grafikon rade nad listom koja je već u memoriji, pa promena datuma ili IP adrese odmah daje novi prikaz, bez ponovnog čitanja fajla.