Gym
lesson

Testiranje konekcije

Kada mreža ne radi kako treba, trebaju ti alati koji otkrivaju gde je problem: da li je host uopšte dostupan, koji servisi slušaju na kojim portovima, i kojim putem putuju paketi. Linux nudi bogat skup dijagnostičkih alata za upravo to.

ping — da li je host dostupan?

ping šalje ICMP echo pakete na zadatu adresu i meri vreme povratka. To je najbrži način da proveris da li je udaljeni host dosupan i kolika je kašnjenje (latencija):

ping google.com
PING google.com (142.250.185.46) 56(84) bytes of data.
64 bytes from 142.250.185.46: icmp_seq=1 ttl=118 time=12.4 ms
64 bytes from 142.250.185.46: icmp_seq=2 ttl=118 time=11.9 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms

Korisne opcije:

ping -c 4 8.8.8.8        # Pošalji tačno 4 paketa, pa stani
ping -i 0.5 192.168.1.1  # Šalji paket svake 0.5 sekunde
ping -q -c 5 google.com  # Tihi mod — prikaži samo statistiku

Napomena: Neki hostovi blokiraju ICMP pakete iz bezbednosnih razloga. Ako ping ne prolazi, to ne znači nužno da je host nedostupan — možda samo blokira ping.

curl — HTTP zahtevi

curl je moćan alat za prenos podataka preko raznih protokola, najčešće HTTP i HTTPS. Izuzetno je koristan za testiranje API-ja, preuzimanje fajlova i pregled HTTP odgovora.

Osnovna upotreba

curl https://example.com

Ispisuje HTML sadržaj stranice na standardni izlaz.

Preuzimanje fajlova sa -o

curl -o stranica.html https://example.com

Opcija -o (output) čuva odgovor u navedeni fajl umesto da ga ispisuje.

curl -O https://example.com/fajl.zip

Opcija -O (veliko slovo) čuva fajl pod originalnim imenom iz URL-a.

Prikaz HTTP zaglavlja sa -I

curl -I https://example.com

Šalje HEAD zahtev i prikazuje samo zaglavlja odgovora — korisno da vidiš status kod, tip sadržaja i druge metapodatke bez preuzimanja celog sadržaja:

HTTP/2 200
content-type: text/html; charset=UTF-8
content-length: 1256
server: ECS (dcb/7F83)

Ostale korisne opcije

curl -v https://example.com       # Verbose — prikaži sve detalje zahteva i odgovora
curl -L https://example.com       # Prati preusmeravanja (redirects)
curl -u korisnik:lozinka http://... # HTTP Basic autentikacija

wget — preuzimanje fajlova

wget je specijalizovan za preuzimanje fajlova, sa podrškom za nastavak prekinutih preuzimanja i rekurzivno preuzimanje web sajtova:

wget https://example.com/fajl.zip

Fajl se automatski čuva u trenutnom direktorijumu pod originalnim imenom.

wget -O moj-fajl.zip https://example.com/fajl.zip   # Sačuvaj pod drugim imenom
wget -c https://example.com/veliki-fajl.iso          # Nastavi prekinuto preuzimanje
wget -q https://example.com/fajl.zip                 # Tihi mod bez ispisa

curl vs wget: curl je bolji za interaktivno testiranje i rad sa API-jem. wget je bolji za preuzimanje fajlova, posebno velikih, jer podržava nastavak preuzimanja.

traceroute — putanja paketa

traceroute prikazuje svaki čvor (ruter) kroz koji paket prolazi na putu do odredišta. Koristan je za dijagnozu gde tačno dolazi do problema u mreži:

traceroute google.com
traceroute to google.com (142.250.185.46), 30 hops max
 1  192.168.1.1      1.2 ms   1.1 ms   1.0 ms   # lokalni ruter
 2  10.0.0.1         5.4 ms   5.2 ms   5.1 ms   # ISP gateway
 3  172.16.3.1      10.1 ms  10.3 ms   9.9 ms
 4  142.250.185.46  12.4 ms  12.1 ms  12.0 ms   # odredište

Svaki red je jedan "skok" (hop). Zvezdice (* * *) znače da ruter ne odgovara na probe — to je normalno za mnoge rutere koji filtriraju UDP/ICMP saobraćaj.

traceroute -n google.com   # Ne razrešavaj IP adrese u imena (brže)

ss — statistika soketa

ss (socket statistics) je moderna zamena za netstat. Prikazuje aktivne mrežne veze i koji portovi su otvoreni na sistemu.

Prikaz listening portova

ss -tlnp

Opcije:

  • -t — TCP soketi
  • -l — samo listening (oni koji čekaju konekcije)
  • -n — prikaži brojeve portova, ne nazive servisa
  • -p — prikaži koji proces drži soket
State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
LISTEN  0       128     0.0.0.0:22          0.0.0.0:*          users:(("sshd",pid=312))
LISTEN  0       5       0.0.0.0:80          0.0.0.0:*          users:(("nginx",pid=445))
LISTEN  0       128     127.0.0.1:5432      0.0.0.0:*          users:(("postgres",pid=567))

Iz ovog ispisa vidimo:

  • Port 22 — SSH server sluša na svim interfejsima
  • Port 80 — nginx web server sluša na svim interfejsima
  • Port 5432 — PostgreSQL baza sluša samo na localhost (nije dostupna spolja)

Ostale korisne kombinacije

ss -an           # Sve konekcije (i TCP i UDP), numerički prikaz
ss -tnp          # Sve aktivne TCP konekcije sa procesima
ss -u -l         # UDP listening portovi
ss -s            # Rezime statistike po tipovima soketa

Praktičan primer dijagnostike

Pretpostavimo da web aplikacija ne radi. Evo redosled koraka:

# 1. Da li je server uopšte dostupan?
ping -c 3 192.168.1.50

# 2. Da li server sluša na portu 80?
ss -tlnp | grep :80

# 3. Da li HTTP odgovara?
curl -I http://192.168.1.50

# 4. Ako ne možemo da dođemo do servera, gde je problem?
traceroute 192.168.1.50

Ovim redosledom sistematski suziš problem — od fizičke dostupnosti, preko aktivnih servisa, do aplikacijske komunikacije.

Rezime komandi

Komanda Opis
ping host Proveri dostupnost hosta
ping -c N host Pošalji tačno N paketa
curl URL Preuzmi sadržaj URL-a
curl -o fajl URL Sačuvaj u fajl
curl -I URL Prikaži samo HTTP zaglavlja
wget URL Preuzmi fajl
traceroute host Prikaži putanju paketa do hosta
ss -tlnp Prikaži listening TCP portove sa procesima