Како користити команду сс на Линуку

ss komanda predstavlja modernu zamenu za klasični netstat. Možete je koristiti u Linux okruženju da biste dobili statističke podatke o vašim mrežnim vezama. U nastavku teksta ćete saznati kako se koristi ovaj koristan alat.

ss komanda u poređenju sa netstat

Kao zamena za zastarelu netstat komandu, ss pruža detaljne informacije o tome kako vaš računar komunicira sa drugim računarima, mrežama i servisima.

ss prikazuje statistiku za Protokol za kontrolu prenosa (TCP), Protokol korisničkih datagrama (UDP), Unix (međuprocesni), i sirove sokete. Sirovi soketi funkcionišu na mrežnom OSI nivou, što znači da TCP i UDP zaglavlja moraju da budu obrađena od strane aplikativnog softvera, a ne od strane transportnog sloja. Internet Control Message Protocol (ICMP) poruke i ping programi koriste sirove sokete.

Korišćenje ss komande

Nije potrebno instalirati ss, s obzirom da je ona već deo moderne Linux distribucije. Međutim, njen izlaz može biti prilično obiman – imali smo rezultate koji su se prostirali na više od 630 linija. Takođe, rezultati mogu biti veoma široki.

Zbog toga smo uključili tekstualne prikaze rezultata koje smo dobili, budući da ne bi stali u snimak ekrana. Skratili smo ih kako bi bili lakši za pregled.

Prikaz mrežnih veza

Korišćenjem ss bez dodatnih opcija komandne linije, prikazuju se soketi koji ne slušaju. Drugim rečima, prikazuju se soketi koji nisu u stanju osluškivanja.

Da biste ovo videli, ukucajte sledeće:

ss

Netid State Recv-Q Send-Q          Local Address:Port Peer Address:Port   Process
u_str ESTAB 0      0                           * 41826           * 41827
u_str ESTAB 0      0 /run/systemd/journal/stdout 35689           * 35688
u_str ESTAB 0      0                           * 35550           * 35551
...
u_str ESTAB 0      0                           * 38127           * 38128
u_str ESTAB 0      0 /run/dbus/system_bus_socket 21243           * 21242
u_str ESTAB 0      0                           * 19039           * 19040
u_str ESTAB 0      0 /run/systemd/journal/stdout 18887           * 18885 
u_str ESTAB 0      0 /run/dbus/system_bus_socket 19273           * 17306
icmp6 UNCONN 0     0                           *:ipv6-icmp       *:*
udp   ESTAB 0      0         192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps

Kolone prikazuju sledeće:

Netid: Tip soketa. U našem primeru imamo „u_str“, Unix stream, „udp“ i „icmp6“, IPv6 ICMP sokete. Više opisa tipova Linux soketa možete pronaći u Linux man stranicama.
Stanje: Status u kom se nalazi soket.
Recv-Q: Broj primljenih paketa.
Send-Q: Broj poslatih paketa.
Lokalna Adresa:Port: Lokalna adresa i port (ili ekvivalentne vrednosti za Unix sokete).
Udaljena Adresa:Port: Udaljena adresa i port (ili ekvivalentne vrednosti za Unix sokete).

Za UDP sokete, kolona „Stanje“ je obično prazna. Za TCP sokete, može biti jedno od sledećeg:

LISTEN: Samo na strani servera. Soket čeka zahtev za povezivanje.
SYN-SENT: Samo na strani klijenta. Ovaj soket je postavio zahtev za povezivanje i čeka da vidi da li je prihvaćen.
SYN-RECEIVED: Samo na strani servera. Ovaj soket čeka potvrdu veze nakon prihvatanja zahteva za povezivanje.
ESTABLISHED: Server i klijenti. Uspostavljena je aktivna veza između servera i klijenta, omogućavajući prenos podataka između njih.
FIN-WAIT-1: Server i klijenti. Ovaj soket čeka zahtev za prekid veze sa udaljenog soketa ili potvrdu zahteva za prekid veze koji je prethodno poslat sa ovog soketa.
FIN-WAIT-2: Server i klijenti. Ovaj soket čeka zahtev za prekid veze od udaljenog soketa.
CLOSE-WAIT: Server i klijent. Ovaj soket čeka zahtev za prekid veze od lokalnog korisnika.
CLOSING: Server i klijenti. Ovaj soket čeka potvrdu zahteva za prekid veze sa udaljenog soketa.
LAST-ACK: Server i klijent. Ovaj soket čeka potvrdu zahteva za prekid veze koju je poslao udaljenom soketu.
TIME-WAIT: Server i klijenti. Ovaj soket je poslao potvrdu udaljenom soketu da je primio zahtev za ukidanje udaljenog soketa. Sada čeka da se uveri da je potvrda primljena.
CLOSED: Nema veze, soket je prekinut.

Soketi za osluškivanje

Da bismo videli sokete za osluškivanje, dodaćemo opciju -l (listen), na sledeći način:

ss -l

Netid State  Recv-Q Send-Q               Local Address:Port                  Peer Address:Port Process
nl    UNCONN 0      0                             rtnl:NetworkManager/535                *
nl    UNCONN 0      0                             rtnl:evolution-addre/2987              *
...
u_str LISTEN 0      4096          /run/systemd/private 13349                            * 0
u_seq LISTEN 0      4096             /run/udev/control 13376                            * 0
u_str LISTEN 0      4096             /tmp/.X11-unix/X0 33071                            * 0
u_dgr UNCONN 0      0      /run/systemd/journal/syslog 13360                            * 0
u_str LISTEN 0      4096    /run/systemd/fsck.progress 13362                            * 0
u_dgr UNCONN 0      0    /run/user/1000/systemd/notify 32303                            * 0

Svi ovi soketi su nepovezani i slušaju. „rtnl“ označava mrežnu vezu za rutiranje, koja se koristi za razmenu informacija između procesa kernela i korisničkog prostora.

Prikaz svih soketa

Da biste prikazali sve sokete, možete koristiti opciju -a (all):

ss -a

Netid State  Recv-Q Send-Q    Local Address:Port                 Peer Address:Port    Process
nl    UNCONN 0      0                  rtnl:NetworkManager/535               *
nl    UNCONN 0      0                  rtnl:evolution-addre/2987 *
...
u_str LISTEN 0      100       public/showq 23222                            * 0
u_str LISTEN 0      100      private/error 23225                            * 0
u_str LISTEN 0      100      private/retry 23228                            * 0
...
udp   UNCONN 0      0             0.0.0.0:631                         0.0.0.0:*
udp   UNCONN 0      0             0.0.0.0:mdns                        0.0.0.0:*
...
tcp   LISTEN 0      128              [::]:ssh                            [::]:*
tcp   LISTEN 0      5               [::1]:ipp                            [::]:*
tcp   LISTEN 0      100             [::1]:smtp                           [::]:*

Izlaz sadrži sve sokete, bez obzira na stanje.

Prikaz TCP soketa

Takođe možete primeniti filter tako da se prikazuju samo određeni soketi. Koristićemo opciju -t (TCP), tako da će biti prikazani samo TCP soketi:

ss -a -t

Prikaz UDP soketa

Opcija -u (UDP) vrši istu vrstu filtriranja. Ovog puta videćemo samo UDP sokete:

ss -a -u

State  Recv-Q Send-Q    Local Address:Port Peer   Address:Port Process
UNCONN 0      0               0.0.0.0:631         0.0.0.0:*
UNCONN 0      0               0.0.0.0:mdns        0.0.0.0:*
UNCONN 0      0               0.0.0.0:60734       0.0.0.0:*
UNCONN 0      0         127.0.0.53%lo:domain      0.0.0.0:*
ESTAB 0       0    192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps
UNCONN 0      0                   [::]:mdns          [::]:*
UNCONN 0      0                   [::]:51193         [::]:*

Prikaz Unix soketa

Da biste videli samo Unix sokete, možete uključiti opciju -x (Unix), kao što je prikazano ispod:

ss -a -x

Netid State Recv-Q Send-Q               Local Address:Port  Peer Address:Port    Process
u_str ESTAB 0      0                                * 41826            * 41827
u_str ESTAB 0      0                                * 23183            * 23184
u_str ESTAB 28     0               @/tmp/.X11-unix/X0 52640            * 52639
...
u_str ESTAB 0      0      /run/systemd/journal/stdout 18887            * 18885
u_str ESTAB 0      0      /run/dbus/system_bus_socket 19273            * 17306

Prikaz sirovih soketa

Filter za sirove sokete je opcija -w (raw):

ss -a -w

Prikaz IPv4 soketa

Soketi koji koriste TCP/IP protokol verzije 4 mogu se prikazati pomoću opcije -4 (IPv4):

ss -a -4

Prikaz IPv6 soketa

Možete uključiti odgovarajući IPv6 filter pomoću opcije -6 (IPv6), na sledeći način:

ss -a -6

Prikaz soketa po stanju

Možete prikazati sokete u zavisnosti od stanja u kom se nalaze pomoću opcije state. Ovo funkcioniše sa stanjima established, listening ili closed. Takođe ćemo koristiti opciju -r (resolve), koja pokušava da razreši mrežne adrese u imena i portove u protokole.

Sledeća komanda će prikazati uspostavljene TCP veze, a ss će pokušati da razreši imena:

ss -t -r state established

Prikazane su četiri veze koje su u uspostavljenom stanju. Ime hosta, ubuntu20-04, je razrešeno, i „ssh“ je prikazano umesto 22 za SSH vezu u drugom redu.

Ovo možemo ponoviti da bismo potražili sokete u stanju slušanja:

ss -t -r state listening

Recv-Q Send-Q Local Address:Port   Peer Address:Port Process
0      128        localhost:5939        0.0.0.0:*
0      4096    localhost%lo:domain      0.0.0.0:*
0      128          0.0.0.0:ssh         0.0.0.0:*
0      5          localhost:ipp         0.0.0.0:*
0      100        localhost:smtp        0.0.0.0:*
0      128             [::]:ssh         [::]:*
0      5      ip6-localhost:ipp         [::]:*
0      100    ip6-localhost:smtp        [::]:*

Prikaz soketa po protokolu

Možete prikazati sokete koji koriste određeni protokol pomoću opcija dport i sport, koje predstavljaju odredišne i izvorne portove.

Ukucavamo sledeće kako bismo prikazali sokete koji koriste HTTPS protokol na uspostavljenoj vezi (obratite pažnju na razmak posle početne i pre završne zagrade):

ss -a state established ‘( dport = :https or sport = :https )’

Možemo koristiti ime protokola ili port koji je obično povezan sa tim protokolom. Podrazumevani port za Secure Shell (SSH) je port 22.

Koristićemo ime protokola u jednoj komandi, a zatim je ponoviti koristeći broj porta:

ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’

Kao što se i očekivalo, dobijamo iste rezultate.

Prikaz veza ka određenoj IP adresi

Sa opcijom dst (destination), možemo prikazati veze ka određenoj odredišnoj IP adresi.

Ukucavamo sledeće:

ss -a dst 192.168.4.25

Identifikacija procesa

Da biste videli koji procesi koriste sokete, možete koristiti opciju process (-p), kao što je prikazano u nastavku (imajte na umu da morate koristiti sudo):

sudo ss -t -p

State Recv-Q Send-Q  Local Address:Port   Peer Address:Port  Process
ESTAB 0      0       192.168.4.28:57650  54.218.19.119:https users:(("firefox",pid=3378,fd=151))
ESTAB 0      0       192.168.4.28:ssh     192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))

Ovo nam pokazuje da dve uspostavljene TCP veze koriste SSH demon i Firefox.

Dostojan naslednik

ss komanda pruža iste informacije koje je prethodno pružao netstat, ali na jednostavniji i pristupačniji način. Za više opcija i saveta pogledajte man stranicu.