ss-commando: poorten en processen controleren in Linux, vergeleken met netstat

TestomgevingDebian-familieDebian 12iproute2 6.1.0gewoon gebruikersaccountGecontroleerd op 2026-11-04
Netwerkcommando'sssLocatie/usr/bin/ss

Welke poorten op een Linux-server open staan en wie er verbonden is, controleer je met het ss-commando. ss is de socket-opvraagtool van iproute2 die netstat vervangt. Bij het opvragen van luisterende (LISTEN) poorten en verbindingen met ss op een Debian 12-server bleek dat vanaf een gewoon account de namen van programma's die andere accounts hebben gestart niet in de kolom Process verschijnen, ook niet met -p.

De uitvoer hieronder is gemaakt met een Engelse locale. De adressen van de server en van de andere kant zijn als voorbeeldadressen weergegeven.

1️⃣ Basisgebruik van het ss-commando en kolommen in de uitvoer

Als je ss zonder opties uitvoert, vallen de luisterende poorten weg en zie je alleen sockets met een opgebouwde verbinding. Op de testserver waren de eerste regels allemaal Unix-sockets (u_str, u_dgr) waarmee programma's binnen de server met elkaar praten.

ss | head -n 5
Netid State Recv-Q Send-Q                              Local Address:Port       Peer Address:Port    Process
u_str ESTAB 0      0                                               * 1013903               * 1013904
u_dgr ESTAB 0      0                                               * 1013960               * 13394
u_str ESTAB 0      0                                               * 1013907               * 1013908
u_str ESTAB 0      0                                               * 46066198              * 46066199

Wil je alleen TCP-verbindingen zien, voeg dan -t toe. De Unix-sockets vallen weg en op de plek van de poort staan servicenamen zoals ssh en https in plaats van nummers.

ss -t
State Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
ESTAB 0      0       203.0.113.10:ssh   198.51.100.7:51114
ESTAB 0      0       203.0.113.10:26676   192.0.2.15:https
ESTAB 0      0       203.0.113.10:29714   192.0.2.16:https

Voeg je ook -n toe, dan blijven de poortnummers staan en worden ze niet omgezet in servicenamen.

ss -tn
State Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
ESTAB 0      0       203.0.113.10:22    198.51.100.7:51114
ESTAB 0      0       203.0.113.10:26676   192.0.2.15:443
ESTAB 0      0       203.0.113.10:29714   192.0.2.16:443

Recv-Q en Send-Q betekenen iets anders afhankelijk van de status van de socket. Bij een verbonden socket is Recv-Q het aantal ontvangen bytes dat het programma nog niet heeft gelezen, en Send-Q het aantal verzonden bytes waarvan de andere kant de ontvangst nog niet heeft bevestigd.

Bij een luisterende socket is Recv-Q het aantal verbindingen in de wachtrij en Send-Q de maximale grootte van de wachtrij. Deze betekenissen komen uit de man-pagina netstat(8) van net-tools.

2️⃣ Poorten controleren in Linux (-tln, -uln, -tulpn)

De uitvoer zonder opties toont geen poorten die op verbindingen wachten. Om open poorten te controleren voeg je daarom -l toe, dat alleen luisterende sockets selecteert. [ss -tln] toont de luisterende TCP-poorten als nummers.

ss -tln
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*
LISTEN 0      511          0.0.0.0:80        0.0.0.0:*
LISTEN 0      511          0.0.0.0:443       0.0.0.0:*
LISTEN 0      511        127.0.0.1:8080      0.0.0.0:*
LISTEN 0      128             [::]:22           [::]:*
LISTEN 0      511             [::]:80           [::]:*
LISTEN 0      511             [::]:443          [::]:*

Staat bij Local Address 0.0.0.0, dan accepteert de socket verbindingen op alle IPv4-adressen van de server; bij 127.0.0.1 kun je alleen vanaf de server zelf verbinden. [::] staat voor alle IPv6-adressen, dus de poorten 22, 80 en 443 staan zowel via IPv4 als via IPv6 open.

Zonder -n worden de poortnummers servicenamen. Poort 8080 verschijnt als http-alt.

ss -tl
State  Recv-Q Send-Q Local Address:Port     Peer Address:PortProcess
LISTEN 0      128          0.0.0.0:ssh           0.0.0.0:*
LISTEN 0      511          0.0.0.0:http          0.0.0.0:*
LISTEN 0      511          0.0.0.0:https         0.0.0.0:*
LISTEN 0      511        127.0.0.1:http-alt      0.0.0.0:*
LISTEN 0      128             [::]:ssh              [::]:*
LISTEN 0      511             [::]:http             [::]:*
LISTEN 0      511             [::]:https            [::]:*

UDP bouwt geen verbindingen op, dus ook luisterende sockets hebben geen LISTEN-status. In de statuskolom van de uitvoer van [ss -uln] stond overal UNCONN. Poort 68 (bootpc) is de DHCP-client en poort 123 (ntp) is de poort voor tijdsynchronisatie.

ss -uln
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
UNCONN 0      0            0.0.0.0:68        0.0.0.0:*
UNCONN 0      0       203.0.113.10:123       0.0.0.0:*
UNCONN 0      0          127.0.0.1:123       0.0.0.0:*
UNCONN 0      0            0.0.0.0:123       0.0.0.0:*
UNCONN 0      0              [::1]:123          [::]:*
UNCONN 0      0               [::]:123          [::]:*

Om TCP en UDP in één keer te zien, voeg je de opties samen, zoals in [ss -tulpn]. Zodra er meer dan één soort wordt getoond, komt er vooraan een kolom Netid bij.

ss -tulpn
Netid State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp   UNCONN 0      0            0.0.0.0:68        0.0.0.0:*
udp   UNCONN 0      0       203.0.113.10:123       0.0.0.0:*
udp   UNCONN 0      0          127.0.0.1:123       0.0.0.0:*
udp   UNCONN 0      0            0.0.0.0:123       0.0.0.0:*
udp   UNCONN 0      0              [::1]:123          [::]:*
udp   UNCONN 0      0               [::]:123          [::]:*
tcp   LISTEN 0      128          0.0.0.0:22        0.0.0.0:*
tcp   LISTEN 0      511          0.0.0.0:80        0.0.0.0:*
tcp   LISTEN 0      511          0.0.0.0:443       0.0.0.0:*
tcp   LISTEN 0      511        127.0.0.1:8080      0.0.0.0:*
tcp   LISTEN 0      128             [::]:22           [::]:*
tcp   LISTEN 0      511             [::]:80           [::]:*
tcp   LISTEN 0      511             [::]:443          [::]:*

3️⃣ Processen controleren met het ss-commando (-p)

-p is de optie die het programma dat een socket gebruikt in de kolom Process toont. Toen [ss -tlnp] echter vanaf een gewoon account op de testserver werd uitgevoerd, bleef de kolom Process leeg zoals hieronder, alsof de optie niet werkte.

ss -tlnp
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*
LISTEN 0      511          0.0.0.0:80        0.0.0.0:*
LISTEN 0      511          0.0.0.0:443       0.0.0.0:*
LISTEN 0      511        127.0.0.1:8080      0.0.0.0:*
LISTEN 0      128             [::]:22           [::]:*
LISTEN 0      511             [::]:80           [::]:*
LISTEN 0      511             [::]:443          [::]:*

ss zoekt het proces achter een socket door voor elk proces de map fd onder /proc te lezen. Een gewoon account kan de fd-map van een proces dat een ander account heeft gestart niet openen, dus de naam van dat programma komt niet in de kolom. Als je vanaf een gewoon account de map van proces 1 opent, dat door root is gestart, krijg je een fout over rechten.

ls /proc/1/fd
ls: cannot open directory '/proc/1/fd': Permission denied

Programma's die je met je eigen account hebt gestart, verschijnen ook vanaf een gewoon account in de kolom Process. Dat is gecontroleerd door de eenvoudige webserver van python3 op poort 8000 van 127.0.0.1 te starten.

python3 -m http.server 8000 --bind 127.0.0.1 &

Voeg na het starten [sport = :8000] toe om alleen de regel van poort 8000 op te vragen.

ss -tlnp sport = :8000
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      5          127.0.0.1:8000      0.0.0.0:*    users:(("python3",pid=343015,fd=3))

Tussen de haakjes na users staan achter elkaar de programmanaam, de pid en het nummer van de bestandsdescriptor (fd).

Ben je klaar met controleren, stop de eenvoudige webserver dan met [kill %1]. Voer je daarna [ss -tln sport = :8000] opnieuw uit, dan blijft alleen de kopregel over en verschijnt de regel van poort 8000 niet meer.

Vanaf het root-account kan ss de gegevens van alle processen lezen, dus wordt de kolom Process gevuld. Luisteren meerdere processen samen op één poort, dan staat er tussen de haakjes van users voor elk proces een vermelding. De programmanamen en pid's in de root-uitvoer hieronder zijn voorbeeldwaarden.

ss -tlnp sport = :443
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      511          0.0.0.0:443       0.0.0.0:*    users:(("app",pid=2101,fd=6),("app",pid=2100,fd=6))
LISTEN 0      511             [::]:443          [::]:*    users:(("app",pid=2101,fd=7),("app",pid=2100,fd=7))

Om een programma te vinden aan de hand van het poortnummer, kun je ook het lsof-commando gebruiken in de vorm [lsof -i :443].

Hoe de kolom Process per account verandert, kun je in het diagram hieronder vergelijken door van account te wisselen.

🧭 ss -p en accounts: wanneer de kolom Process gevuld wordt
Uitlegdiagram
👤 Account
$# ss -tlnp
Luisterende socketProcesgegevensKolom Process
0.0.0.0:22LISTEN
➜
/proc/812/fdEigenaar: root
➜
Processen van andere accounts: niet leesbaarroot: leest alle processenKolom Process leegusers:(("sshd",pid=812,fd=3))
127.0.0.1:8080LISTEN
➜
/proc/2100/fdEigenaar: root
➜
Processen van andere accounts: niet leesbaarroot: leest alle processenKolom Process leegusers:(("app",pid=2100,fd=3))
127.0.0.1:8000LISTEN
➜
/proc/343015/fdEigenaar: user
➜
Processen van mijn account: leesbaarroot: leest alle processenusers:(("python3",pid=343015,fd=3))
Een gewoon account kan de /proc-gegevens van processen van andere accounts niet lezen, dus blijft de kolom Process in die regels leeg en wordt alleen de python3-regel gevuld die je met je eigen account hebt gestart.
root kan de gegevens van alle processen lezen, dus staan bij elke luisterende socket de programmanaam en pid in de kolom Process.

4️⃣ ss-filteropties voor status en poort

  • ↪️ state, dport, sport

Ook nadat je de open poorten hebt gecontroleerd, moet je apart uitzoeken wie er op dit moment met die poorten verbonden is. ss houdt alleen de gewenste regels over als je na de opties filtervoorwaarden toevoegt.

Zet je na state de naam van een status, dan blijven alleen de sockets met die status over. De uitvoer van [ss -tn state established] heeft geen kolom State en begint bij de kolom Recv-Q.

ss -tn state established
Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
0      0       203.0.113.10:22    198.51.100.7:51114
0      0       203.0.113.10:26676   192.0.2.15:443
0      0       203.0.113.10:29714   192.0.2.16:443

Poorten filter je met dport (poort van de andere kant) en sport (eigen poort). Verbindingen die van de server naar externe https-servers gaan, selecteer je met [dport = :443].

ss -tn dport = :443
State Recv-Q Send-Q Local Address:Port  Peer Address:PortProcess
ESTAB 0      0       203.0.113.10:26676   192.0.2.15:443
ESTAB 0      0       203.0.113.10:29714   192.0.2.16:443

Gebruik je sport samen met -l, dan controleer je alleen of die poort luistert.

ss -tln sport = :22
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*
LISTEN 0      128             [::]:22           [::]:*

Meerdere voorwaarden combineer je met haakjes en or, en je zet ze tussen enkele aanhalingstekens zodat de shell de haakjes niet eerst leest. Hieronder zie je het resultaat waarbij volgens het voorbeeld uit de man-pagina alleen ssh-verbindingen zijn geselecteerd.

ss -tn state established '( dport = :ssh or sport = :ssh )'
Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0      0       203.0.113.10:22   198.51.100.7:51114

TIME-WAIT is de status waarin een verbinding nog even blijft nadat ze is verbroken. Die verschijnt niet in de standaarduitvoer, dus je ziet hem alleen als je hem apart selecteert met [state time-wait].

ss -tn state time-wait
Recv-Q Send-Q Local Address:Port  Peer Address:PortProcess
0      0          127.0.0.1:28750    127.0.0.1:80
0      0          127.0.0.1:57698    127.0.0.1:8080
0      0              [::1]:31936        [::1]:80

Typ je een statusnaam verkeerd, dan stopt het commando meteen met één foutregel [wrong state name]. Hieronder zie je het resultaat met opzettelijk ingevoerde foo. De bruikbare namen staan op de regel TCP-STATES in de uitvoer van [ss -h].

ss -tn state foo
ss: wrong state name: foo

📌 Belangrijkste opties: resultaten uit dit artikel

OptieTaakResultaat in dit artikel
-tToont alleen TCP-socketsUnix-sockets vallen weg en op de plek van de poort staan servicenamen zoals ssh en https
-nToont poortnummers in plaats van servicenamenIn ss -tn verschijnt ssh als 22 en https als 443
-lToont alleen luisterende (LISTEN) socketsss -tln toont luisterende poorten zoals 22, 80 en 443
-uToont alleen UDP-socketsIn de statuskolom van ss -uln staat overal UNCONN
-pToont het programma achter elke socket in de kolom ProcessVanaf een gewoon account toont alleen de door mijn account gestarte python3 een naam en pid; programma's van andere accounts blijven leeg
-sVat het aantal per soort samen in plaats van sockets op te sommenestab 9 op de TCP-regel komt overeen met de 9 regels van de uitvoer van state established zonder kopregel
-4Toont alleen IPv4-socketsIn ss -t4ln vallen de regels weg die met [::] beginnen
-6Toont alleen IPv6-socketsIn ss -t6ln vallen de regels weg die met 0.0.0.0 en 127.0.0.1 beginnen
-HToont alleen socketregels, zonder kopregelHet aantal regels van ss -H -tln | wc -l telt de kopregel niet mee
state STATUSHoudt alleen sockets met die status overDe uitvoer van state established begint zonder kolom State bij Recv-Q; een onbekende naam geeft [wrong state name: foo]
dport = :POORTFiltert op de poort van de andere kantdport = :443 toont twee regels met verbindingen naar externe https-servers
sport = :POORTFiltert op de eigen poortsport = :22 samen met -l toont twee luisterende regels voor poort 22, IPv4 en IPv6
src ADRESHoudt alleen sockets op dat adres overss -tln src 127.0.0.1 toont alleen de poorten op 127.0.0.1, die alleen verbindingen vanaf de server zelf accepteren

📎 Andere opties: volgens de officiële handleiding

OptieTaak
-a, --allToont luisterende en verbonden sockets samen
-r, --resolveZet adressen en poortnummers om in namen
-e, --extendedToont per socket uitgebreide gegevens zoals uid en inode
-o, --optionsToont timergegevens zoals TCP-hertransmissie en keepalive
-m, --memoryToont het geheugen dat elke socket gebruikt
-i, --infoToont interne TCP-gegevens (rtt, cwnd enzovoort)
-x, --unixToont alleen Unix-domeinsockets
-w, --rawToont alleen RAW-sockets
-f FAMILIESelecteert op socketfamilie, zoals unix, inet, inet6, link of netlink
-Q, --no-queuesToont de uitvoer zonder de kolommen Recv-Q en Send-Q
-K, --killSluit sockets die aan het filter voldoen geforceerd; sockets die de kernel niet ondersteunt worden overgeslagen
-E, --eventsToont doorlopend sockets die worden gesloten
-V, --versionToont versie-informatie

🔲 ss-commando-simulator

In de simulator hieronder kun je de tot nu toe behandelde opties en filters zelf invoeren en de uitvoer vergelijken met [netstat -tln].

ss-commando-simulatoriproute2 6.1.0
[root@server work]#
Dit is een scherm van een gewoon account (user) dat alleen in je browser werkt; met ↑↓ haal je eerder ingevoerde commando's terug.

5️⃣ ss-socketoverzicht (-s)

-s toont in plaats van de socketlijst een overzicht van het aantal per soort. Volgens de man-pagina telt het de lijst niet één voor één, maar verzamelt het de getallen uit verschillende statistieken.

ss -s
Total: 340
TCP:   48 (estab 9, closed 15, orphaned 0, timewait 13)

Transport Total     IP        IPv6
RAW       0         0         0
UDP       8         4         4
TCP       33        25        8
INET      41        29        12
FRAG      0         0         0

estab op de TCP-regel is het aantal verbindingen dat nu is opgebouwd. Daarom kun je het vergelijken met het aantal regels dat [state established] op hetzelfde moment toont.

ss -tn state established | wc -l
10

Haal je de ene kopregel van de 10 uitvoerregels af, dan blijven er 9 over, gelijk aan estab 9 van -s. timewait 13 is het aantal TIME-WAIT-sockets, die alleen zichtbaar waren als je ze selecteerde met [state time-wait].

6️⃣ ss-commando vergeleken met netstat

netstat zit in het pakket net-tools, waarvan de man-pagina netstat een nauwelijks nog gebruikt programma (mostly obsolete) noemt en aanraadt om ss te gebruiken. Scripts die zijn geschreven voor de uitvoervorm van netstat kunnen de uitvoer van ss echter niet zomaar lezen, omdat de kolomvolgorde en de schrijfwijze van adressen verschillen.

Toen de luisterende TCP-poorten van dezelfde server met beide commando's werden getoond, zette netstat de status helemaal achteraan en schreef het IPv6-adressen als :::22.

netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN
tcp6       0      0 :::443                  :::*                    LISTEN

Bij ss staat de status vooraan en worden IPv6-adressen tussen vierkante haken gezet, zoals [::]:22.

ss -tln
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*
LISTEN 0      511          0.0.0.0:80        0.0.0.0:*
LISTEN 0      511          0.0.0.0:443       0.0.0.0:*
LISTEN 0      511        127.0.0.1:8080      0.0.0.0:*
LISTEN 0      128             [::]:22           [::]:*
LISTEN 0      511             [::]:80           [::]:*
LISTEN 0      511             [::]:443          [::]:*

Veelgebruikte netstat-opties komen overeen met de volgende ss- en ip-commando's.

netstatVervangend commando / wat het toont
netstat -tlnss -tlnLuisterende TCP-poorten als nummers
netstat -tulpnss -tulpnLuisterende TCP- en UDP-poorten met programma's
netstat -tanss -tanAlle TCP-sockets als nummers
netstat -rip routeRouteringstabel
netstat -iip -s linkStatistieken van netwerkinterfaces
De ip-commando's die netstat -r en netstat -i vervangen, staan in de NOTES van de man-pagina netstat(8) van net-tools.

🔢 FAQ & aanbevolen content

Met -4 blijven alleen IPv4-sockets over, met -6 alleen IPv6-sockets. In [ss -t4ln] vielen de regels weg die met [::] beginnen, en in [ss -t6ln] de regels die met 0.0.0.0 en 127.0.0.1 beginnen.

Zet je na src een adres, dan blijven alleen de luisterende sockets op dat adres over. [ss -tln src 127.0.0.1] toonde alleen de poorten op 127.0.0.1, die van buiten de server niet bereikbaar zijn.

Met -H verschijnen alleen de socketregels, zonder kopregel. Als je regels telt, zoals met [ss -H -tln | wc -l], wordt de kopregel niet meegeteld.

🧭 Aanbevolen content over netwerkcommando's 13 artikelen · 3 bronnen
🗂️ Netwerkcommando's
📄 ip-commando 📄 netstat- en ifconfig-commando's 📄 nmtui-commando 📄 ss-commando
📄 SSH-commando 📄 rsync-commando 📄 wget-commando 📄 rz- en sz-commando's
📄 host-commando 📄 nslookup-commando
📄 iptables-commando 📄 firewall-cmd-commando 📄 certbot-commando

ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Laat zien dat je geen machine bent: 10   +   2   =