Cum să utilizați comanda ss pe Linux

Publicat: 2022-01-29
O fereastră de terminal pe un sistem de laptop Linux.
Fatmawati Achmad Zaenuri/Shutterstock

Comanda ss este un înlocuitor modern pentru netstat clasic. Îl puteți folosi pe Linux pentru a obține statistici despre conexiunile dvs. de rețea. Iată cum să lucrați cu acest instrument la îndemână.

Comanda ss versus netstat

Un înlocuitor pentru comanda netstat depreciată, ss vă oferă informații detaliate despre modul în care computerul dvs. comunică cu alte computere, rețele și servicii.

ss afișează statistici pentru Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (interprocess) și socket-uri brute. Prizele brute operează la nivelul OSI al rețelei, ceea ce înseamnă că anteturile TCP și UDP trebuie gestionate de software-ul aplicației, nu de stratul de transport. Mesajele Internet Control Message Protocol (ICMP) și utilitarul ping folosesc ambele socketuri brute.

Folosind ss

Nu trebuie să instalați ss , deoarece face deja parte dintr-o distribuție Linux actualizată. Ieșirea sa, totuși, poate fi foarte lungă – am avut rezultate care conțin peste 630 de linii. Rezultatele sunt, de asemenea, foarte ample.

Din acest motiv, am inclus reprezentări text ale rezultatelor pe care le-am obținut, deoarece acestea nu s-ar încadra într-o captură de ecran. Le-am tăiat pentru a le face mai ușor de gestionat.

Listarea conexiunilor de rețea

Utilizarea ss fără opțiuni de linie de comandă listează socket-urile care nu ascultă. Adică, listează prizele care nu sunt în starea de ascultare.

Pentru a vedea acest lucru, tastați următoarele:

 ss 

 Netid State Recv-Q Send-Q Adresă locală: 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

Coloanele sunt după cum urmează:

  • Netid : tipul de priză. În exemplul nostru, avem „u_str”, un flux Unix, un „udp” și „icmp6”, o soclu IP versiunea 6 ICMP. Puteți găsi mai multe descrieri ale tipurilor de socket Linux în paginile de manual Linux.
  • Stare : starea în care se află soclul.
  • Recv-Q : numărul de pachete primite.
  • Send-Q : numărul de pachete trimise.
  • Adresă locală: Port : adresa locală și portul (sau valori echivalente pentru socket-urile Unix).
  • Peer Address:Port : adresa și portul de la distanță (sau valori echivalente pentru socket-urile Unix).
Publicitate

Pentru socket-urile UDP, coloana „State” este de obicei goală. Pentru socket-urile TCP poate fi unul dintre următoarele:

  • ASCULTATE: Numai pe partea serverului. Priza așteaptă o solicitare de conectare.
  • SYN-SENT: Numai partea clientului. Această priză a făcut o solicitare de conectare și așteaptă să vadă dacă este acceptată.
  • SYN-RECEIVED: numai pe partea serverului. Această priză așteaptă o confirmare a conexiunii după ce a acceptat o solicitare de conectare.
  • INSTALAT: Server și clienți. S-a stabilit o conexiune de lucru între server și client, permițând transferul datelor între cei doi.
  • FIN-WAIT-1: Server și clienți. Acest socket așteaptă o solicitare de terminare a conexiunii de la soclul de la distanță sau o confirmare a unei cereri de terminare a conexiunii care a fost trimisă anterior de la acest soclu.
  • FIN-WAIT-2: Server și clienți. Această priză așteaptă o solicitare de terminare a conexiunii de la priza de la distanță.
  • CLOSE-WAIT: Server și client. Această priză așteaptă o solicitare de terminare a conexiunii de la utilizatorul local.
  • ÎNCHIDERE: Server și clienți. Această priză așteaptă o confirmare a cererii de terminare a conexiunii de la soclul de la distanță.
  • LAST-ACK: Server și client. Această priză așteaptă o confirmare a cererii de terminare a conexiunii pe care a trimis-o către soclul de la distanță.
  • TIME-WAIT: Server și clienți. Acest socket a trimis o confirmare către soclul de la distanță pentru a-l anunța că a primit cererea de terminare a soclului de la distanță. Acum așteaptă să se asigure că a fost primită confirmarea.
  • ÎNCHIS: Nu există nicio conexiune, deci priza a fost întreruptă.

Listarea prize de ascultare

Pentru a vedea prizele de ascultare vom adăuga opțiunea -l (ascultare), astfel:

 ss -l 

 Netid State Recv-Q Send-Q Adresă locală: Port Peer Address: Port Process 
nl UNCONN 0 0 rtnl:NetworkManager/535 * 
nl UNCONN 0 0 rtnl:evolution-adre/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

Aceste prize sunt toate neconectate și ascultă. „rtnl” înseamnă rutare netlink, care este folosit pentru a transfera informații între procesele kernel și spațiul utilizatorului.

Listarea tuturor prizelor

Pentru a lista toate socket-urile, puteți utiliza opțiunea -a (toate):

 ss -a 

 Netid State Recv-Q Send-Q Adresă locală: Port Peer Address: Port Process 
nl UNCONN 0 0 rtnl:NetworkManager/535 * 
nl UNCONN 0 0 rtnl:evolution-adre/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 ASCULTĂ 0 128 [::]:ssh [::]:* 
tcp ASCULTĂ 0 5 [::1]:ipp [::]:* 
tcp ASCULTĂ 0 100 [::1]:smtp [::]:*

Ieșirea conține toate prizele, indiferent de stare.

Listarea socket-urilor TCP

De asemenea, puteți aplica un filtru, astfel încât să fie afișate numai soclurile care se potrivesc. Vom folosi opțiunea -t (TCP), astfel încât numai socket-urile TCP vor fi listate:

ss -a -t

Listarea socket-urilor UDP

Opțiunea -u (UDP) efectuează același tip de acțiune de filtrare. De data aceasta, vom vedea numai socket-uri UDP:

 ss -a -u 

 State Recv-Q Send-Q Adresă locală: 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 [::]:*

Listarea socket-urilor Unix

Pentru a vedea numai socket-urile Unix, puteți include opțiunea -x (Unix), după cum se arată mai jos:

 ss -a -x 

 Netid State Recv-Q Send-Q Adresă locală: 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

Listarea prizelor brute

Filtrul pentru prize brute este opțiunea -w (raw):

 ss -a -w 

Listare IP Versiunea 4 Sockets

Prizele care utilizează protocolul TCP/IP versiunea 4 pot fi listate folosind opțiunea -4 (IPV4):

 ss -a -4 

Listare IP Versiunea 6 Sockets

Puteți activa filtrul IP versiunea 6 potrivit cu opțiunea -6 (IPV6), astfel:

 ss -a -6 

Listarea prizelor după stat

Puteți enumera socket-urile în funcție de starea în care se află cu opțiunea de state . Aceasta funcționează cu stări stabilite, de ascultare sau închise. Vom folosi, de asemenea, opțiunea de rezolvare ( -r ), care încearcă să rezolve adresele de rețea la nume și porturile la protocoale.

Publicitate

Următoarea comandă va căuta conexiuni TCP stabilite, iar ss va încerca să rezolve numele:

 ss -t -r stare stabilită 

Sunt listate patru conexiuni care sunt în starea stabilită. Numele de gazdă, ubuntu20-04, a fost rezolvat și „ssh” este afișat în loc de 22 pentru conexiunea SSH pe a doua linie.

Putem repeta acest lucru pentru a căuta prize în starea de ascultare:

 ss -t -r starea de ascultare 

 Recv-Q Trimitere-Q Adresă locală: 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 [::]:*

Listarea socket-urilor după protocol

Puteți lista socket-urile folosind un anumit protocol cu ​​opțiunile dport și sport , care reprezintă porturile de destinație și, respectiv, sursă.

Introducem următoarele pentru a enumera socket-urile folosind protocolul HTTPS pe o conexiune established (rețineți spațiul de după paranteza de deschidere și înainte de cea de închidere):

 ss -o stare stabilită „( dport = :https sau sport = :https )” 

Putem folosi numele protocolului sau portul asociat de obicei cu acel protocol. Portul implicit pentru Secure Shell (SSH) este portul 22.

Publicitate

Vom folosi numele protocolului într-o singură comandă și apoi îl vom repeta folosind numărul portului:

 ss -a '( dport = :ssh sau sport = :ssh )'
 ss -a '( dport = :22 sau sport = :22 )' 

După cum era de așteptat, obținem aceleași rezultate.

Listarea conexiunilor la o anumită adresă IP

Cu opțiunea dst (destinație), putem enumera conexiunile către o anumită adresă IP de destinație.

Introducem următoarele:

 ss -a dst 192.168.4.25 

Identificarea proceselor

Pentru a vedea ce procese folosesc socket-urile, puteți utiliza opțiunea procese ( -p ), așa cum se arată mai jos (rețineți că trebuie să utilizați sudo ):

 sudo ss -t -p 

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

Acest lucru ne arată că cele două conexiuni stabilite pe socket-urile TCP sunt folosite de demonul SSH și Firefox.

Un succesor demn

Comanda ss oferă aceleași informații furnizate anterior de netstat , dar într-un mod mai simplu, mai accesibil. Puteți consulta pagina de manual pentru mai multe opțiuni și sfaturi.

LEGATE: Cele mai bune laptopuri Linux pentru dezvoltatori și entuziaști