Wat is netstat en hoe gebruik je het?

Auteur: Gepubliceerd

In het kort: netstat is een opdrachtregelhulpmiddel dat netwerkverbindingen, poorten waarop programma’s op verkeer wachten en andere netwerkinformatie toont. Op Linux is het doorgaans beschikbaar in het pakket net-tools: de opdracht sudo netstat -tulnp toont TCP- en UDP-poorten en de bijbehorende processen. Om tot stand gebrachte TCP-verbindingen te bekijken, is sudo netstat -tnp handig. Een modern alternatief is ss.

Wat toont netstat en wanneer is het handig?

Met netstat kun je controleren met welke adressen een computer communiceert en welke programma’s netwerkdiensten aanbieden. Het helpt bijvoorbeeld vast te stellen of een webserver draait, waarom een applicatie een poort niet kan gebruiken of welk proces een verbinding met een ander apparaat onderhoudt.

Een poort is een nummer waarmee netwerkverkeer naar een bepaalde dienst wordt geleid. Een programma dat op een poort luistert, wacht op communicatie. Een actieve TCP-verbinding verbindt een specifiek lokaal adres en poort met het adres en de poort van de andere kant.

netstat toont de toestand zoals die zichtbaar is op de onderzochte computer. De uitvoer alleen bewijst niet dat een dienst vanaf internet bereikbaar is: een firewall, router of netwerkregels van de infrastructuurprovider kunnen de toegang blokkeren.

Hoe installeer je netstat op Linux?

Controleer eerst of het hulpmiddel al werkt:

netstat --version

Als de shell meldt dat de opdracht niet gevonden is, installeer dan het pakket net-tools via de pakketbeheerder van je distributie. Gebruikelijke opdrachten zijn:

DistributieInstallatie
Debian, Ubuntusudo apt update && sudo apt install net-tools
Fedorasudo dnf install net-tools
Arch Linuxsudo pacman -S net-tools
openSUSEsudo zypper install net-tools

Voor de installatie zijn beheerdersrechten nodig. Heb je op een beheerde server geen toegang tot sudo, vraag de beheerder dan om de installatie of controleer of de opdracht ss beschikbaar is.

Op veel moderne Linux-systemen is netstat niet standaard geïnstalleerd. Voor het onderzoeken van verbindingen wordt ss uit het pakket iproute2 aanbevolen. netstat kan nog steeds handig zijn bij het werken met oudere instructies en omgevingen.

Hoe controleer je actieve verbindingen?

Voer het volgende uit om TCP-verbindingen te tonen zonder sockets die op nieuwe verbindingen wachten:

sudo netstat -tnp

De optie -t selecteert TCP, -n toont numerieke adressen en poorten zonder namen op te zoeken en -p voegt procesinformatie toe. Met sudo kun je ook gegevens zien van processen van andere gebruikers; zonder de juiste rechten is een deel van de informatie mogelijk niet beschikbaar.

In de kolom State vind je de verbindingsstatus. ESTABLISHED betekent dat een verbinding tot stand is gebracht, SYN_SENT dat er een poging wordt gedaan om een verbinding tot stand te brengen en TIME_WAIT dat de verbinding is beëindigd, maar het systeem de gegevens ervan nog bewaart. Een vermelding van TIME_WAIT duidt op zichzelf niet op een storing.

Als je alleen tot stand gebrachte TCP-verbindingen wilt zien, kun je de uitvoer filteren:

sudo netstat -tnp | grep ESTABLISHED

De kolom Local Address bevat het lokale adres en de lokale poort; Foreign Address bevat het adres en de poort van de andere kant. UDP brengt niet op dezelfde manier verbindingen tot stand als TCP. UDP-sockets hebben daarom geen vergelijkbare status ESTABLISHED. Gebruik sudo netstat -unp om ze te bekijken.

Hoe vind je programma’s die op poorten luisteren?

De handigste opdracht om netwerkdiensten te controleren is:

sudo netstat -tulnp

De optie -l beperkt de uitvoer tot luisterende sockets en -u neemt UDP mee. Bij TCP zie je de status LISTEN; bij UDP gaat het om sockets die datagrammen ontvangen, niet om het luisteren naar verbindingen zoals bij TCP.

Een vereenvoudigde voorbeeldregel kan er zo uitzien:

tcp  0  0  127.0.0.1:8080  0.0.0.0:*  LISTEN  2451/python3

Dit betekent dat het proces python3 met PID 2451 op poort 8080 luistert, maar alleen op de lokale loopbackinterface. PID is de proces-ID waarmee je het proces nader kunt onderzoeken, bijvoorbeeld met de opdracht ps -p 2451 -f.

Het adres waarop een programma luistert, is van belang:

Beschouw het adres 0.0.0.0:* in de kolom Foreign Address niet als een externe client. Bij een luisterende socket betekent het dat er geen andere kant is opgegeven.

Voorbeeld: een applicatie kan poort 8080 niet gebruiken

Als een applicatie meldt dat poort 8080 bezet is, controleer dan de luisterende TCP-sockets:

sudo netstat -tlnp | grep ':8080 '

Lees de PID en de programmanaam af en controleer het proces vervolgens met de opdracht ps -p PID -f. Vervang daarbij PID door het gevonden nummer. Ga na of het een eerdere instantie van je applicatie is of een dienst die nodig is. Stop pas daarna het juiste programma op de gebruikelijke manier, of kies een andere poort. Beëindig geen onbekend proces alleen omdat het verhindert dat je applicatie start.

Als netstat niet beschikbaar is, kun je een vergelijkbare controle uitvoeren met:

sudo ss -tulnp

Bij problemen met toegang vanaf een andere computer controleer je eerst het luisteradres en het proces. Onderzoek pas daarna de firewall en de netwerkroute. Zo maak je onderscheid tussen een applicatie die niet werkt en een probleem met de bereikbaarheid van de poort.

Zie ook: Domeinnaam en social media — wat moet consistent zijn?

Lees ook

Lees hoe PHP-FPM PHP-verzoeken verwerkt, verschilt van een webserver en hoe je processen afstemt op verkeer en hostingcapaciteit.
Ontdek hoe BIND als open DNS-serversoftware domeinen beheert, welke rollen het vervult en wanneer zelf beheren zinvol is.
Lees wat het Poolse REGON-register en -nummer betekenen, hoe ze verschillen van NIP en KRS en hoe je bedrijfsgegevens controleert.