Autor sekcije: Domagoj Margan, Vedran Miletić

Snimanje prometa aplikacija

Prilikom analize rada računalne mreže često se služimo alatima za snimanje mrežnog prometa i analizu sadržaja paketa. Dva najpopularnija alata ove namjene su tcpdump i Wireshark. Način rada s potonjim opisujemo u nastavku.

Todo

Ovdje nedostaje paragraf o tome kada je Wireshark nastao, kako se nekad zvao Ethereal i gdje se primjenjuje u praksi, koje operacijske sustave podržava, itd.

Osim sa stvarnim čvorovima i mrežnim sučeljima, Wireshark radi i sa emuliranim. Unutar alata CORE dostupan je desnim klikom na čvor i odabirom opcije Wireshark te željenog mrežnog sučelja. Kako bi pritom lakše otkrili koje vam mrežno sučelje treba, u slučaju kad ih čvor ima više, možete pod View/Show uključiti Interface Names.

Upoznavanje sa sučeljem Wiresharka

Napomena

Studenti koji žele znati više, ili iz bilo kojeg razloga preferiraju video lekcije pred klasičnim tekstualnim, mogu materijale naći u službenoj Wireshark dokumentaciji koja uključuje i nešto video materijala.

Nakon pokretanja Wiresharka, pojaviti će se grafičko sučelje s nizom korisničkih opcija i mogućnosti. Grafičko sučelje sastoji se od pet glavnih djelova:

  • Izbornik naredbi (engl. command menu)
  • Prozor za prikaz uhvaćenih paketa
  • Prozor za prikaz detalja paketnih zaglavlja
  • Prozor za prikaz sadržaja paketa
  • Polje filtra kod prikaza (engl. display filters)

Izbornik naredbi je standardna alatna traka locirana na vrhu sučelja. Od posebne su važnosti za rad izbornici File i Capture. Izbornik File omogućava spremanje uhvaćenih podataka, kao i otvaranje prethodno uhvaćenih podataka s mreže. Također, u izborniku File nude se opcije za import i eksport paketa. Putem izbornika Capture možemo namjestiti bitne postavke za hvatanje mrežnog prometa, te pokrenuti i prekinuti hvatanje prometa.

Prozor za prikaz uhvaćenih paketa u jednoj liniji prikazuje sažetak svakog uhvaćenog paketa: redni broj paketa, vrijeme hvatanja paketa, izvorišnu i odredišnu adresu paketa te informacije o protokolu.

Prozor za prikaz detalja paketnih zaglavlja prikazuje detalje zaglavlja uhvaćenog paketa.

Prozor za prikaz sadržaja paketa prikazuje cjelokupni sadržaj uhvaćenog okvira, u ASCII i hexadecimalnom formatu.

Polje filtra kod prikaza je polje za unos određenog filtra za prikaz, na temelju kojeg se filtriraju informacije na prozoru za prikaz uhvaćenih paketa (te na prozoru za prikaz paketnih zaglavlja i sadržaja paketa).

Početak i završetak hvatanja prometa

Odabir mrežnog sučelja na kojem će se vršiti snimanje prometa radi se putem opcije Interfaces... u izborniku Capture. Hvatanje prometa može biti započeto odabirom opcije Start u izborniku Capture nakon odabira mrežnog sučelja.

Hvatanje prometa može, potpuno analogno, biti zaustavljeno odabirom opcije Stop u izborniku Capture.

Nakon zaustavljanja snimljeni promet moguće je spremiti kao pcap datoteku.

Razmatranje strukture i sadržaja paketa

Najčešće korišteni protokol podatkovnog sloja na lokalnim mrežama je Ethernet. Svaki okvir koji je upućen u mrežu Ethernet dospijeva na svaku mrežnu karticu te mreže. U standardnom načinu rada, okvir preuzima (kopira) samo ona mrežna kartica na čiju je adresu taj okvir upućen. Eternet zaglavlja sadrže podatke potrebne za ispravanu komunikaciju lokalnom mrežom, tj adresu mrežne kartice odredišnog čvora i adresu mrežne kartice izvorišnog čvora.

TCP i IP paketi sastoje se od dva osnovna dijela: zaglavlja i tijela. Zaglavlje sadrži brojeve portova i druge upravljačke sadržaje, dok se u tijelo upisuje podatkovni sadržaj kojeg paket prenosi. S obzirom na to da je IP protokol niže razine od TCP-a, unutar IP paketa sadržan je cjelokupni TCP segment koji se također sastoji od zasebnih dijelova. Možemo reći da IP zaglavlje okružuje TCP segment (sa zaglavljem) unutar kojeg se nalaze podaci.

TCP i IP zaglavlja su uglavnom velika po 20 bajtova, no mogu imati i opcionalni dio varijabilne dužine. Primjerice, u IP paketu ukupne dužine 1500 bajtova, prenosi se TCP segment ukupne dužine 1480 bajtova, u kojem se prenosi 1460 bajtova korisnog tereta, odnosno sadržaja s aplikacijske razine.

TCP protokol promatra sadržaj kojeg prima od aplikacije kao niz bajtova te tvori TCP segmente iz tog niza bajtova; pritom svakom segmentu dodjeljuje kao slijedni broj onu vrijednost koja je jednaka poziciji (rednom broju) prvog bajta iz tog paketa u (većem) nizu bajtova koje proizvodi aplikacija i koje njena TCP veza prenosi na odredište. Svaki segment (uključujući i TCP zaglavlje) mora stati u 65535 bajtova IP paketa. Ako je segment prevelik, usmjerivač vrši fragmentaciju u više manjih segmenata od kojih svaki dobiva svoje IP zaglavlje.

Kako bi razumjeli strukturu Ethernet, IP i TCP zaglavlja, moramo poznavati polja koja postoje u njihovim zaglavljima i značenje vrijednosti koje ona sadrže.

Struktura zaglavlja Ethernet, IP i TCP paketa

Ethernet zaglavlja sadrže tri bitna polja:

  • Adresa odredišta (Destination) -- MAC adresa odredišta (mrežne kartice odredišta), može biti unicast, broadcast ili multicast adresa
  • Adresa izvora (Source) -- MAC adresa izvorišta (mrežne kartice izvorišta)
  • Tip Ethernet paketa (Ethertype) -- tip paketa koji je sadržan u Ethernet okviru

Značajna polja IP zaglavlja su:

  • Version -- Verzija IP protokola, određuje format zaglavlja
  • Internet Header Length (IHL) -- Duljina IP zaglavlja u 32-bitnim riječima, omogućava određivanje početka podataka
  • Type of Service -- Tip usluge, omogućava usmjernicima različit tretman pojedinih paketa u cilju postizanja zadovoljavajuće kvalitete usluge (QoS), a s obzirom na dopušteno kašnjenje, količinu prometa i zahtijevanu pouzdanost
  • Total Length -- Ukupna duljina IP paketa u oktetima, uključujući IP zaglavlje i podatke; najveća duljina paketa je 65 535 okteta (s obzirom na 16-bitno polje TL)
  • Identification -- Identifikator paketa, važan je pri povezivanju svih fragmenata u paket
  • Flags -- Kontrolne zastavice, definiraju je li fragmentacija dopuštena i ako jest, ima li još fragmenata istog paketa
  • Fragment Offset -- Definira mjesto fragmenta u originalnom paketu, mjereno u jedinicama od 8 okteta (64 bita); odstupanje prvog fragmenta je nula
  • Time to Live (TTL) -- Maksimalno vrijeme života paketa u mreži, nakon čega se neisporučeni paket odbacuje; mjeri se u sekundama, čvor koji obrađuje paket umanjuje vrijednost za najmanje 1, a ako je vrijednost nula paket se odbacuje
  • Protocol -- Označava protokol više razine kojem se podaci prosljeđuju
  • Header Checksum -- Kontrolni zbroj zaglavlja; ponovno se obračunava i provjerava pri svakoj promjeni podataka u zaglavlju
  • Source Address -- IP adresa predajnika paketa
  • Destination Address -- IP adresa prijemnika paketa
  • Options -- Varijabilne duljine, opcionalno; sadrži kontrolne informacije o usmjeravanju, sigurnosne parametre itd.
  • Padding -- Varijabilne duljine, dopuna polja opcija do 32 bita; popunjava se nulama

Značajna polja TCP zaglavlja su:

  • Source Port -- Broj priključne točke usluge izvorišta
  • Destination Port -- Broj priključne točke usluge odredišta
  • Sequence Number -- Redni broj prvog okteta podataka u tom segmentu; ako je postavljena zastavica S (SYN), onda je to početni redni broj (ISN** -- Initial Sequence Number), a prvi oktet podataka ima broj ISN+1
  • Acknowledgment Number -- Broj potvrde; ako je postavljen A (ACK) bit, polje sadrži redni broj sljedećeg okteta kojeg primatelj očekuje
  • Offset -- Pomak podataka, pokazuje na početak podataka u TCP segmentu, izraženo u 32-bitnim riječima (TCP zaglavlje je uvijek višekratnik 32-bitne riječi)
  • Reserved -- Polje je rezervirano za buduće potrebe; popunjeno je nulama
  • Kontrolni bitovi (zastavice)
    • URG -- Indikator hitnih podataka
    • ACK -- Indikator paketa potvrde
    • PSH -- Inicira prosljeđivanje svih do tada neproslijeđenih podataka korisniku
    • RST -- Ponovna inicijalizacija veze
    • SYN -- Sinkronizacija rednih brojeva
    • FIN -- Izvorište više nema podataka za slanje
  • Window -- Prozor, označava koliko je okteta prijemnik spreman primiti
  • Checksum -- Kontrolni zbroj; računa se kao 16-bitni komplement jedinice komplementa zbroja svih 16-bitnih riječi u zaglavlju i podacima; pokriva i 96 bitova pseudozaglavlja koje sadrži izvorišnu i odredišnu adresu, protokol i duljinu TCP zaglavlja i podataka
  • Urgent Pointer -- Pokazivač na redni broj okteta gdje se nalaze hitni podaci; polje se gleda jedino ako je postavljena zastavica URG
  • Options + Padding -- Options mogu, a ne moraju biti uključene; ako postoje, veličine su x×8 bita, Padding je dopuna nulama do 32 bita
  • Data -- Podaci aplikacijske razine

Uvid u strukturu i sadržaj paketa korištenjem Wiresharka

Wireshark nam omogućuje direktan uvid u strukturu i sadržaj paketa. Odabirom paketa iz prozora za prikaz uhvaćenih paketa možemo vidjeti njegovu strukturu, tj. informacije o njegovim zaglavljima i korisnom teretu (tijelu).

U prozoru za prikaz detalja paketnih zaglavlja nalaze se svi podaci o zaglavljima odabranog paketa. Ovisno o tome koje zaglavlje paketa odaberemo za pregled, vidimo različite odgovarajuće informacije. Tako ćemo, primjerice, za odabrani TCP segment moći pregledati informacije o Ethernet, TCP i IP zaglavljima, kao i o cjelokupnom okviru paketa. Ukoliko je riječ o HTTP prijenosu podataka, imati ćemo uvid i u informacije o tom segmentu paketa (uz Ethernet, TCP i IP).

Klikom na neki od dijelova zaglavlja u prozoru za prikaz detalja zaglavlja interaktivno se zatamnjuje povezani dio paketa u prozoru za prikaz sadržaja paketa. Na taj način možemo vidjeti odnos zaglavlja sa samom strukturom čitavog paketa; vidimo poziciju svakog podatka zaglavlja. Isto vrijedi i obrnuto -- klikom na bilo koji dio sadržaja paketa zatamnjuje se i prikazuje odgovarajući dio zaglavlja. Pogledom na detalje zaglavlja paketa možemo utvrditi koliko u stvarnosti svako pojedino zaglavlje zauzima byteova te usporediti tu veličinu sa veličinom paketnog okvira i veličinom korisnog tereta.