
De ss commando is een moderne vervanging voor de klassieker netstat. U kunt het op Linux gebruiken om statistieken over uw netwerkverbindingen te krijgen. Hier leest u hoe u met deze handige tool kunt werken.
Het ss-commando versus netstat
Een vervanging voor het verouderde netstat opdracht, 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 onbewerkte sockets. Raw sockets werken op het OSI-niveau van het netwerk, wat betekent dat TCP- en UDP-headers moeten worden afgehandeld door de applicatiesoftware, niet door de transportlaag. ICMP-berichten (Internet Control Message Protocol) en het ping-hulpprogramma gebruiken beide onbewerkte sockets.
Met behulp van ss
U hoeft niet te installeren ss, aangezien het al deel uitmaakt van een up-to-date Linux-distributie. De uitvoer kan echter erg lang zijn – we hebben resultaten met meer dan 630 regels. De resultaten zijn ook erg breed.
Daarom hebben we tekstweergaven toegevoegd van de resultaten die we hebben verkregen, omdat deze niet in een screenshot passen. We hebben ze bijgesneden om ze beter beheersbaar te maken.
Lijst met netwerkverbindingen
Gebruik makend van ss zonder opdrachtregelopties geeft sockets weer die niet luisteren. Dat wil zeggen, het geeft een overzicht van de sockets die niet in de luisterstand staan.
Typ het volgende om dit te zien:
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
De kolommen zijn als volgt:
- Netid: Het type stopcontact. In ons voorbeeld hebben we “u_str”, een Unix-stream, een “udp” en “icmp6”, een IP-versie 6 ICMP-socket. Je kunt meer beschrijvingen van Linux-socketsoorten vinden in de Linux man-pagina’s.
- Staat: De staat waarin het stopcontact zich bevindt.
- Recv-Q: Het aantal ontvangen pakketten.
- Verzenden-Q: Het aantal verzonden pakketten.
- Lokaal adres: poort: Het lokale adres en de poort (of equivalente waarden voor Unix-sockets).
- Peer-adres: poort: Het externe adres en de poort (of equivalente waarden voor Unix-sockets).
Voor UDP-sockets is de kolom “State” meestal leeg. Voor TCP-sockets kan dit een van de volgende zijn:
- LUISTER: Alleen serverzijde. Het stopcontact wacht op een verbindingsverzoek.
- SYN-VERZONDEN: Alleen client-side. Deze socket heeft een verbindingsverzoek gedaan en wacht om te zien of het wordt geaccepteerd.
- SYN-ONTVANGEN: Alleen serverzijde. Deze socket wacht op een verbindingsbevestiging na het accepteren van een verbindingsverzoek.
- GEVESTIGD: Server en klanten. Er is een werkende verbinding tot stand gebracht tussen de server en de client, waardoor gegevens tussen de twee kunnen worden uitgewisseld.
- FIN-WAIT-1: Server en klanten. Deze socket wacht op een verzoek tot beëindiging van de verbinding van de socket op afstand, of een bevestiging van een verzoek om de verbinding te beëindigen dat eerder vanuit deze socket is verzonden.
- FIN-WAIT-2: Server en klanten. Deze socket wacht op een verzoek om de verbinding te beëindigen van de externe socket.
- SLUITEN-WACHTEN: Server en klant. Deze socket wacht op een verzoek tot beëindiging van de verbinding van de lokale gebruiker.
- SLUITEND: Server en klanten. Deze socket wacht op een bevestiging van een verzoek om de verbinding te beëindigen door de externe socket.
- LAATSTE ACK: Server en klant. Deze socket wacht op een bevestiging van het verzoek om de verbinding te beëindigen dat naar de externe socket is verzonden.
- TIJD WACHT: Server en klanten. Deze socket heeft een bevestiging naar de externe socket gestuurd om te laten weten dat deze het beëindigingsverzoek van de externe socket heeft ontvangen. Het wacht nu om er zeker van te zijn dat de bevestiging is ontvangen.
- GESLOTEN: Er is geen verbinding, dus het stopcontact is beëindigd.
Listing luistersockets
Om de luistersockets te zien, voegen we de -l (luister) optie, zoals 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 stopcontacten zijn allemaal niet aangesloten en luisteren. De “rtnl” betekent routing netlink, die wordt gebruikt om informatie tussen kernel- en gebruikersruimteprocessen uit te wisselen.
Alle stopcontacten weergeven
Om alle stopcontacten weer te geven, kunt u de -a (alle) optie:
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 [::]:*
De output bevat alle sockets, ongeacht de staat.
Lijst met TCP-sockets
U kunt ook een filter toepassen zodat alleen bijpassende stopcontacten worden weergegeven. We gebruiken de -t (TCP) optie, dus alleen TCP-sockets worden weergegeven:
ss -a -t

Lijst met UDP-sockets
De -u (UDP) -optie voert hetzelfde type filteractie uit. Deze keer zien we alleen UDP-sockets:
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 [::]:*
Unix-sockets weergeven
Om alleen Unix-sockets te zien, kunt u de -x (Unix) optie, zoals hieronder getoond:
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
Aanbieding Raw Sockets
Het filter voor ruwe sockets is de -w (raw) optie:
ss -a -w

Lijst met IP-versie 4-aansluitingen
Sockets die het protocol TCP / IP versie 4 gebruiken, kunnen worden weergegeven met de -4 (IPV4) optie:
ss -a -4

Lijst met IP-versie 6-aansluitingen
U kunt het overeenkomende IP-versie 6-filter inschakelen met de -6 (IPV6) optie, zoals zo:
ss -a -6

Lijst met stopcontacten op staat
U kunt sockets weergeven op basis van de staat waarin ze zich bevinden met de state optie. Dit werkt met gevestigde, luisterende of gesloten toestanden. We gebruiken ook de oplossingsoptie (-r), die probeert netwerkadressen om te zetten in namen en poorten in protocollen.
De volgende opdracht zoekt naar gevestigde TCP-verbindingen, en ss zal proberen de namen op te lossen:
ss -t -r state established

Er worden vier verbindingen weergegeven die zich in de gevestigde staat bevinden. 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 stopcontacten in de luisterstand:
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 [::]:*
Sockets op protocol weergeven
U kunt de sockets weergeven die een bepaald protocol gebruiken met de dport en sport opties, die respectievelijk de doel- en bronpoorten vertegenwoordigen.
We typen het volgende om sockets weer te geven die het HTTPS-protocol gebruiken op een established verbinding (let op de spatie na het haakje openen en voor het sluitende haakje):
ss -a state established ‘( dport = :https or sport = :https )’

We kunnen de protocolnaam of de poort gebruiken die gewoonlijk bij dat protocol hoort. De standaardpoort voor Secure Shell (SSH) is poort 22.
We gebruiken de protocolnaam in één opdracht en herhalen deze met het poortnummer:
ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’

Zoals verwacht krijgen we dezelfde resultaten.
Lijst met verbindingen met een specifiek IP-adres
Met de dst (bestemming) optie, kunnen we verbindingen naar een bepaald bestemmings-IP-adres weergeven.
We typen het volgende:
ss -a dst 192.168.4.25

Processen identificeren
Om te zien welke processen de sockets gebruiken, kunt u de optie processen (-p), zoals hieronder weergegeven (merk op dat u 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))
Dit toont ons dat de twee tot stand gebrachte verbindingen op TCP-sockets worden gebruikt door de SSH-daemon en Firefox.
Een waardige opvolger
De ss commando biedt dezelfde informatie die eerder is verstrekt door netstat, maar op een eenvoudigere, meer toegankelijke manier. Je kunt de man-pagina bekijken voor meer opties en tips.