Cum să utilizați comanda ss pe Linux

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 depreciat comanda netstat, ss vă oferă informații detaliate despre modul în care computerul dumneavoastră comunică cu alte computere, rețele și servicii.

ss afișează statistici pentru Protocol de control al transmisiei (TCP), Protocolul de datagramă utilizator (UDP), Unix (interproces), și prize brute. Prize 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. Internet Control Message Protocol (ICMP) și mesajele ping utilitatea ambele folosesc prize 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          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

Coloanele sunt după cum urmează:

  Cum să ștergeți volume Linux LVM

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 tipuri 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 și portul local (sau valori echivalente pentru socket-urile Unix).
Peer Address:Port: adresa și portul de la distanță (sau valori echivalente pentru socket-urile Unix).

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               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

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.

  Cum să auditați securitatea sistemului dvs. Linux cu Lynis

Listarea tuturor prizelor

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

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                           [::]:*

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 soclurilor 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    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         [::]:*

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               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

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 stare. 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.

  5 cele mai bune distribuții Linux pentru o viață mai bună a bateriei

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

ss -t -r state established

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 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        [::]:*

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 sursa.

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

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

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

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

ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or 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 lista 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 de 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  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))

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 verifica pagina de manual pentru mai multe opțiuni și sfaturi.