Een terminalvenster op een Linux-laptopsysteem.
Fatmawati Achmad Zaenuri/

Het ss-commando is een moderne vervanging voor het klassieke netstat. Je kunt het onder Linux gebruiken om statistieken over je netwerkverbindingen te krijgen. Hier leest u hoe u met dit handige hulpprogramma werkt.

The ss Command versus netstat

Een vervanging voor de verouderde opdracht netstat, ss geeft u gedetailleerde informatie over hoe uw computer communiceert met andere computers, netwerken en services.

ss geeft statistieken weer voor Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (interprocess), en raw sockets. Raw sockets werken op het OSI-netwerkniveau, wat betekent dat TCP- en UDP-headers moeten worden afgehandeld door de toepassingssoftware, niet door de transportlaag. Internet Control Message Protocol (ICMP) berichten en het ping hulpprogramma gebruiken beide raw sockets.

Ss gebruiken

U hoeft ss niet te installeren, omdat het al onderdeel is van een up-to-date Linux distributie. De uitvoer kan echter erg lang zijn-we hebben resultaten gehad van meer dan 630 regels. De resultaten zijn ook erg breed.

Om die reden hebben we tekst-representaties bijgevoegd van de resultaten die we hebben verkregen, omdat ze niet in een screenshot zouden passen. We hebben ze bijgesneden om ze beter hanteerbaar te maken.

Listing Network Connections

Gebruik van ss zonder command-line opties geeft een lijst van sockets die niet aan het luisteren zijn. Dat wil zeggen, het toont de sockets die niet in de luisterende status zijn.

Om dit te zien, typt u het volgende:

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

De kolommen zijn als volgt:

  • Netid: Het type socket. In ons voorbeeld hebben we “u_str,” een Unix stream, een “udp,” en “icmp6,” een IP versie 6 ICMP socket. Meer beschrijvingen van Linux socket types vindt u in de Linux man pages.
  • State: De toestand waarin de socket zich bevindt.
  • Recv-Q: Het aantal ontvangen pakketten.
  • Send-Q: Het aantal verzonden pakketten.
  • Local Address:Port: Het lokale adres en poort (of gelijkwaardige waarden voor Unix sockets).
  • Peer Address:Port: Het adres en poort op afstand (of gelijkwaardige waarden voor Unix sockets).

Voor UDP sockets is de kolom “State” meestal blanco. Voor TCP sockets kan dit een van de volgende zijn:

  • LISTEN: Alleen server-side. De socket wacht op een verbindingsverzoek.
  • SYN-SENT: Alleen client-side. Deze socket heeft een verbindingsverzoek gedaan en wacht om te zien of het wordt geaccepteerd.
  • SYN-RECEIVED: Alleen server-side. Deze socket wacht op een verbindingsbevestiging na het accepteren van een verbindingsverzoek.
  • ESTABLISHED: Server en clients. Er is een werkende verbinding tot stand gebracht tussen de server en de client, zodat gegevens tussen beide kunnen worden overgedragen.
  • FIN-WAIT-1: Server en clients. Deze socket wacht op een verbindingsbeëindigingsverzoek van de remote socket, of op een bevestiging van een verbindingsbeëindigingsverzoek dat eerder vanuit deze socket is verzonden.
  • FIN-WAIT-2: Server en clients. Deze socket wacht op een verbindingsbeëindigingsverzoek van de remote socket.
  • CLOSE-WAIT: Server en client. Deze socket wacht op een verzoek van de lokale gebruiker om de verbinding te beëindigen.
  • CLOSING: Server en client. Deze socket wacht op een bevestiging van het verzoek om verbindingsbeëindiging van de remote socket.
  • LAST-ACK: Server en client. Deze socket wacht op een bevestiging van het verzoek om verbindingsbeëindiging dat hij naar de remote socket heeft gestuurd.
  • TIME-WAIT: Server en clienten. Deze socket heeft een bevestiging naar de socket op afstand gestuurd om te laten weten dat hij het verzoek van de socket op afstand om de verbinding te beëindigen heeft ontvangen. Hij wacht nu om er zeker van te zijn dat de bevestiging is ontvangen.
  • GESLOTEN: Er is geen verbinding meer, dus de socket is beëindigd.

Listing Listening Sockets

Om de luisterende sockets te zien voegen we de -l (listening) optie toe, zo:

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

Deze sockets zijn allemaal niet verbonden en luisteren. De “rtnl” betekent routing netlink, die wordt gebruikt om informatie tussen kernel en userspace processen over te dragen.

Listing All Sockets

Om alle sockets op te sommen, kunt u de -a (all) optie gebruiken:

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

De uitvoer bevat alle sockets, ongeacht de status.

Listing TCP Sockets

U kunt ook een filter toepassen zodat alleen overeenkomende sockets worden weergegeven. We gebruiken de optie -t (TCP), zodat alleen TCP sockets worden weergegeven:

ss -a -t

Listing UDP Sockets

De optie -u (UDP) voert eenzelfde soort filteractie uit. Deze keer krijgen we alleen UDP sockets te zien:

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

Listing Unix Sockets

Om alleen Unix sockets te zien, kunt u de optie -x (Unix) toevoegen, zoals hieronder is weergegeven:

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

Listing Raw Sockets

Het filter voor raw sockets is de -w (raw) optie:

ss -a -w

Listing IP Version 4 Sockets

Sockets die gebruik maken van het TCP/IP versie 4 protocol kunnen worden vermeld met de optie -4 (IPV4):

ss -a -4

Listing IP Version 6 Sockets

U kunt het bijpassende IP versie 6 filter aanzetten met de -6 (IPV6) optie, op de volgende manier:

ss -a -6

Listing Sockets By State

U kunt sockets op de lijst zetten volgens de status waarin ze zich bevinden met de state optie. Dit werkt met established, listening, of closed states. We gebruiken ook de optie resolve (-r), die netwerkadressen probeert om te zetten in namen, en poorten in protocollen.

Het volgende commando zoekt naar gevestigde TCP-verbindingen, en ss probeert de namen om te zetten:

ss -t -r state established

Er worden vier verbindingen vermeld die in de gevestigde status zijn. De hostnaam, ubuntu20-04, is opgelost en “ssh” wordt weergegeven in plaats van 22 voor de SSH-verbinding op de tweede regel.

We kunnen dit herhalen om te zoeken naar sockets in de luisterende status:

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

Listing Sockets By Protocol

Je kunt de sockets die een bepaald protocol gebruiken in een lijst zetten met de dport en sport opties, die respectievelijk de bestemmings- en bronpoorten vertegenwoordigen.

We typen het volgende om een lijst te maken van sockets die gebruik maken van het HTTPS protocol op een established verbinding (let op de spatie na de openende haakjes en voor de sluitende):

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

We kunnen de protocolnaam gebruiken of de poort die gewoonlijk met dat protocol wordt geassocieerd. De standaardpoort voor Secure Shell (SSH) is poort 22.

We gebruiken de protocolnaam in één commando, en herhalen het dan met het poortnummer:

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

Zoals verwacht, krijgen we dezelfde resultaten.

Lijsten van verbindingen naar een specifiek IP-adres

Met de optie dst (bestemming) kunnen we een lijst maken van verbindingen naar een bepaald IP-adres van bestemming.

We typen het volgende:

ss -a dst 192.168.4.25

Processen identificeren

Om te zien welke processen de sockets gebruiken, kunt u de processen optie (-p) gebruiken, zoals hieronder getoond (merk op dat u sudo moet gebruiken):

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

Dit laat ons zien dat de twee opgezette verbindingen op TCP sockets worden gebruikt door de SSH daemon en Firefox.

Een waardige opvolger

Het ss commando geeft dezelfde informatie die eerder door netstat werd geleverd, maar op een eenvoudiger, meer toegankelijke manier. U kunt de man page bekijken voor meer opties en tips.

Articles

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.