Comanda ss
este un înlocuitor modern al clasicului netstat
. O puteți utiliza pe Linux pentru a obține statistici despre conexiunile de rețea. Iată cum să lucrați cu acest instrument la îndemână.
Comanda ss versus netstat
Înlocuitor al comenzii netstat
, care a fost depreciată, ss
vă oferă informații detaliate despre modul în care calculatorul dumneavoastră comunică cu alte calculatoare, rețele și servicii.
ss
Afișează statistici pentru Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (interproces) și socket-uri raw. Prizele brute funcționează la nivelul OSI al rețelei, ceea ce înseamnă că antetele TCP și UDP trebuie să fie gestionate de software-ul aplicației, nu de stratul de transport. Mesajele ICMP (Internet Control Message Protocol) și utilitarul ping folosesc ambele socket-uri raw.
Utilizarea ss
Nu trebuie să instalați ss
, deoarece face deja parte dintr-o distribuție Linux actualizată. Cu toate acestea, rezultatul său poate fi foarte lung – am avut rezultate care conțineau peste 630 de linii. Rezultatele sunt, de asemenea, foarte largi.
Din acest motiv, am inclus reprezentări text ale rezultatelor obținute, deoarece nu ar încăpea într-o captură de ecran. Le-am tăiat pentru a le face mai ușor de gestionat.
Listarea conexiunilor de rețea
Utilizarea lui ss
fără opțiuni în linia de comandă listează socket-urile care nu ascultă. Adică, listează socket-urile care nu sunt în stare de ascultare.
Pentru a vedea acest lucru, tastați următoarele:
ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Processu_str ESTAB 0 0 * 41826 * 41827u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688u_str ESTAB 0 0 * 35550 * 35551...u_str ESTAB 0 0 * 38127 * 38128u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242u_str ESTAB 0 0 * 19039 * 19040u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306icmp6 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 stream Unix, un „udp” și „icmp6”, un socket IP versiunea 6 ICMP. Puteți găsi mai multe descrieri ale tipurilor de socket Linux în paginile de manual Linux.
- State: Starea în care se află socket-ul.
- Recv-Q: Numărul de pachete primite.
- Send-Q: Numărul de pachete trimise.
- Local Address:Port: Adresa și portul local (sau valori echivalente pentru socket-uri Unix).
- Peer Address:Port: Adresa și portul de la distanță (sau valori echivalente pentru socket-uri Unix).
Pentru socket-uri UDP, coloana „State” este de obicei goală. Pentru socket-urile TCP, aceasta poate fi una dintre următoarele:
- LISTEN: Numai pe partea serverului. Socketul așteaptă o cerere de conexiune.
- SYN-SENT: Numai pe partea de client. Acest socket a făcut o cerere de conexiune și așteaptă să vadă dacă este acceptată.
- SYN-RECEIVED: Numai pe partea serverului. Acest socket așteaptă o confirmare a conexiunii după ce a acceptat o cerere de conexiune.
- ESTABLISHED: Server și clienți. A fost stabilită o conexiune funcțională între server și client, permițând transferul de date între cei doi.
- FIN-WAIT-1: Server și clienți. Această priză așteaptă o cerere de încheiere a conexiunii de la priza la distanță sau o confirmare a unei cereri de încheiere a conexiunii care a fost trimisă anterior de la această priză.
- FIN-WAIT-2: Server și clienți. Acest socket așteaptă o cerere de terminare a conexiunii de la socketul de la distanță.
- CLOSE-WAIT: Server și client. Acest socket așteaptă o cerere de terminare a conexiunii din partea utilizatorului local.
- CLOSING: Server și clienți. Acest socket așteaptă o confirmare a cererii de terminare a conexiunii din partea socket-ului de la distanță.
- LAST-ACK: Server și client. Acest socket așteaptă o confirmare a cererii de terminare a conexiunii pe care a trimis-o către socketul de la distanță.
- TIME-WAIT: Server și clienți. Această priză a trimis o confirmare către priza la distanță pentru a o anunța că a primit cererea de terminare a conexiunii a prizei la distanță. Acum așteaptă să se asigure că acea confirmare a fost primită.
- CLOSED: Nu mai există nici o conexiune, deci socket-ul a fost închis.
Listarea socket-urilor de ascultare
Pentru a vedea socket-urile de ascultare vom adăuga opțiunea -l
(listening), 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 socket-uri sunt toate neconectate și în ascultare. „rtnl” înseamnă „routing netlink”, care este folosit pentru a transfera informații între procesele din kernel și cele din spațiul utilizatorului.
Listarea tuturor soclurilor
Pentru a lista toate soclurile, puteți folosi opțiunea -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 :ipp :* tcp LISTEN 0 100 :smtp :*
Lovitura conține toate soclurile, indiferent de stare.
Listarea soclurilor TCP
De asemenea, puteți aplica un filtru astfel încât să fie afișate numai soclurile corespunzătoare. Vom folosi opțiunea -t
(TCP), astfel încât vor fi listate numai socluri TCP:
ss -a -t
Listarea soclurilor UDP
Opțiunea -u
(UDP) realizează același tip de acțiune de filtrare. De data aceasta, vom vedea doar socketurile 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 socketurilor Unix
Pentru a vedea doar socketurile Unix, puteți include opțiunea -x
(Unix), așa 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 reprezentat de opțiunea -w
(raw):
ss -a -w
Listarea IP Version 4 Sockets
Socket-urile care utilizează protocolul TCP/IP versiunea 4 pot fi listate cu ajutorul opțiunii -4
(IPV4):
ss -a -4
Listarea IP versiunea 6 Sockets
Puteți activa filtrul de potrivire IP versiunea 6 cu ajutorul opțiunii -6
(IPV6), după cum urmează:
ss -a -6
Listarea soclurilor în funcție de stare
Puteți lista soclurile în funcție de starea în care se află cu opțiunea state
. Acest lucru funcționează cu stări stabilite, de ascultare sau închise. Vom folosi, de asemenea, opțiunea resolve (-r
), care încearcă să rezolve adresele de rețea în nume și porturile în protocoale.
Comenda următoare va căuta conexiuni TCP stabilite, iar ss
va încerca să rezolve numele:
ss -t -r state established
Sunt listate patru conexiuni care se află în starea established. Numele de gazdă, ubuntu20-04, a fost rezolvat și este afișat „ssh” în loc de 22 pentru conexiunea SSH de pe a doua linie.
Puteți repeta acest lucru pentru a căuta socluri în stare 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 soclurilor în funcție de protocol
Puteți lista soclurile care utilizează un anumit protocol cu opțiunile dport
și sport
, care reprezintă porturile de destinație și, respectiv, de sursă.
Tipăm următorul text pentru a lista socket-urile care utilizează protocolul HTTPS pe o conexiune established
(observați spațiul de după paranteza de deschidere și înainte de cea de închidere):
ss -a state established '( dport = :https or sport = :https )'
Puteți utiliza numele protocolului sau portul asociat de obicei cu acel protocol. Portul implicit pentru Secure Shell (SSH) este portul 22.
Vom folosi numele protocolului într-o singură comandă, apoi o vom repeta folosind numărul portului:
ss -a '( dport = :ssh or sport = :ssh )'
ss -a '( dport = :22 or sport = :22 )'
Cum era de așteptat, obținem aceleași rezultate.
Listarea conexiunilor către o anumită adresă IP
Cu opțiunea dst
(destinație), putem lista conexiunile către o anumită adresă IP de destinație.
Tipăm următoarele:
ss -a dst 192.168.4.25
Identificarea proceselor
Pentru a vedea ce procese folosesc socket-urile, puteți folosi opțiunea processes (-p
), așa cum se arată mai jos (rețineți că trebuie să folosiț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-uri TCP sunt folosite de către daemonul SSH și Firefox.
Un succesor demn de urmat
Comanda ss
oferă aceleași informații furnizate anterior de netstat
, dar într-un mod mai simplu și mai accesibil. Puteți consulta pagina man pentru mai multe opțiuni și sfaturi.
.