netstat

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. Syntax
  3. Beispiel
  4. Optionen
  5. Ausgabe
  6. Links

Wiki/Icons/terminal.png netstat ist ein Diagnose-Werkzeug, mit dem man verschiedene Informationen über den Status der Netzwerkschnittstelle(n) in Erfahrung bringen kann. Das Kommandozeilenprogramm [1] ist auf jedem Ubuntu-System vorhanden.

Eine Alternative ist das Programm ss (socket state) aus dem Paket iproute.

Installation

Das Programm netstat ist in jeder Ubuntu-Installation bereits enthalten und im Paket

integriert.

Syntax

Die allgemeine Syntax von netstat ist recht einfach:

netstat [OPTIONEN] 

Beispiel

Eine häufige Verwendung für netstat ist herauszufinden, auf welchen Ports Serverdienste laufen, die für andere Rechner erreichbar sind. Leser, die nur an dieser Verwendung interessiert sind, benutzen einfach folgenden Befehl:

sudo netstat -tulpen | grep -v 127.0.0.1 

Optionen

Das netstat-Programm wird vollständig über seine Kommandozeilen-Parameter gesteuert. Diese besitzen alle einen aussagekräftigen langen Namen, dem zwei Bindestriche vorangestellt werden. Die meisten Optionen bieten auch eine einstellige Kurzform, die durch einen einzelnen Bindestrich eingeleitet wird. Mehrere dieser Einzelbuchstaben können auch in eine Zeichenkette kombiniert werden. (Siehe Beispiel oben.)

Dieser Artikel erhebt nicht den Anspruch der Vollständigkeit und behandelt nur die gängigen Optionen. Wer auch Interesse an etwas exotischeren Formen hat, sollte die Manpage von netstat zu Rate ziehen.

Modus

Das netstat-Tool vereint mehrere verschiedene Diagnose-Werkzeuge in einem. Durch die Modus-Option wird bestimmt, welche Art Informationen netstat ausgeben soll. Die Kombination mehrerer Modi in einem Befehl ist nicht möglich.

Option Abk. Beschreibung
keine Der Standard-Modus. Informiert über offene Netzwerk-Sockets.
--route -r Gibt die Routing-Tabelle des Kernels aus, ähnlich wie der route-Befehl.
--interface -i Gibt Statistiken über die übertragenen Pakete an den einzelnen Netzwerkschnittstellen aus.
--statistics -s Noch ausführlichere Statistiken.
--masquerade -M Liste aller aktuellen "maskierten" Verbindungen auf einem Router mit Network Address Translation.
--groups -g Informationen über Multicast-Gruppen.

Dieser Artikel beschäftigt sich im weiteren Verlauf mit dem Standard-Modus. Einige Optionen, wie z.B. -n, funktionieren aber auch mit den anderen Modi.

Protokoll

Standardmäßig listet netstat alle Sockets auf, die auf dem System offen sind. Das schließt die oft sehr lange Liste sogenannter Unix-Sockets mit ein, die auf dem System intern zur Kommunikation zwischen Prozessen benutzt wird. Aus Gründen der Übersichtlichkeit bietet es sich deswegen an, die Ausgabe über die Angabe von Optionen auf die relevanten Informationen zu beschränken. Wird mindestens eine Protokoll-Option angegeben, beschränkt sich die Ausgabe auf das angegebene Protokoll. Die Verknüpfung mehrerer derartiger Optionen ist möglich.

Option Abk. Beschreibung
--inet -4 Zeige nur IP-Sockets 🇩🇪 der am weitesten verbreiteten IP-Version 4 an.
--inet6 -6 Zeige nur IP-Sockets der neueren Version 6 an.
--unix -x Zeige nur Unix-Domain-Sockets an.
--tcp -t Zeige nur TCP-Sockets an.
--udp -u Zeige nur UDP-Sockets an.

Da TCP und UDP beides Internet-Protokolle sind, sind die Kombinationen -46 und -tu äquivalent und listen alle IP-Verbindungen auf.

Art des Sockets

Sockets können entweder Teil einer bestehenden Verbindung sein oder wie im Falle von Serverdiensten "offen" auf eingehende Verbindungen warten.

Option Abk. Beschreibung
keine Der Standard. Zeige nur bestehende Verbindungen an.
--listening -l Zeige nur "offene Ports" an.
--all -a Zeige beides an.

Da UDP ein statusloses Protokoll ist und nur aus einzeln versendeten Paketen besteht, gibt es bei diesem Protokoll keine "aktiven Verbindungen". Eine Angabe der Option -u ohne -l oder -a ergibt deswegen nie einen Treffer.

Art der Ausgabe

Standardmäßig versucht netstat, IP-Adressen, Protokolle und Benutzer-IDs von Zahlen in Namen zu übersetzen. Das kann unerwünscht sein, weil z.B. durch die Namensauflösung von IP-Adressen evtl. selber Netzwerkverbindungen aufgebaut werden müssen, die dann das Ergebnis verfälschen oder im Falle eines gestörten DNS-Dienstes zu einer langen Wartezeit (bis zum Timeout) führen könnte.

Option Abk. Beschreibung
--numeric -n Übersetze keine Nummern in Namen, sondern zeige die Nummern unverändert an. (Wie eine Kombination der folgenden drei Optionen.)
--numeric-hosts Übersetze keine IP-Adressen über den DNS-Dienst in Hostnamen.
--numeric-ports Übersetze die Portnummern nicht mit Hilfe der Datei /etc/services in Servicenamen.
--numeric-users Zeige die numerischen Benutzer-IDs an, statt Benutzernamen.

Weitere Optionen

Option Abk. Beschreibung
--extend -e Zeige erweiterte Informationen an. Ohne diese Option wird bspw. der Benutzer, dem ein Socket gehört, nicht angezeigt.
--program -p Zeige die Prozess-ID und den Programmnamen des Prozesses an, dem der Socket gehört. Diese Information ist privilegiert. Ohne Root-Rechte erfährt man diese Informationen nur über die eigenen Prozesse.

Ausgabe

Eine typische Ausgabe von netstat sieht etwa so aus:

$ sudo netstat -taupen
Password: 
Aktive Internetverbindungen (Server und stehende Verbindungen)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       Benutzer   Inode      PID/Program name   
tcp        0      0 127.0.0.1:2208          0.0.0.0:*               LISTEN     0          17755      5328/hpiod          
tcp        0      0 127.0.0.1:111           0.0.0.0:*               LISTEN     0          14881      4339/portmap        
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     0          17723      5304/cupsd          
tcp        0      0 0.0.0.0:4185            0.0.0.0:*               LISTEN     113        18098      5607/rpc.statd      
tcp        0      0 127.0.0.1:2207          0.0.0.0:*               LISTEN     107        17768      5333/python         
tcp        0      0 192.168.4.6:4462        192.168.5.5:993         VERBUNDEN  1000       22697      6425/sylpheed-claws 
tcp        0      0 192.168.4.6:3165        84.19.178.217:5222      VERBUNDEN  1000       20523      5895/gajim          
tcp        0      0 192.168.4.6:3780        192.168.5.5:5222        VERBUNDEN  1000       20526      5895/gajim          
tcp6       0      0 :::22                   :::*                    LISTEN     0          17999      5531/sshd           
udp        0      0 0.0.0.0:1024            0.0.0.0:*                          113        18093      5607/rpc.statd      
udp        0      0 0.0.0.0:695             0.0.0.0:*                          0          18084      5607/rpc.statd      
udp        0      0 127.0.0.1:111           0.0.0.0:*                          0          14880      4339/portmap        
udp        0      0 0.0.0.0:631             0.0.0.0:*                          0          17726      5304/cupsd          
udp        0      0 192.168.4.6:123         0.0.0.0:*                          0          18130      5627/ntpd           
udp        0      0 127.0.0.1:123           0.0.0.0:*                          0          18129      5627/ntpd           
udp        0      0 0.0.0.0:123             0.0.0.0:*                          0          18124      5627/ntpd           
udp6       0      0 fe80::211:d8ff:fe6f:123 :::*                               0          18128      5627/ntpd           
udp6       0      0 fe80::20e:35ff:feba:123 :::*                               0          18127      5627/ntpd
udp6       0      0 ::1:123                 :::*                               0          18126      5627/ntpd
udp6       0      0 :::123                  :::*                               0          18125      5627/ntpd

Die wichtigsten Spalten in dieser Tabelle sind folgende:

Name Beschreibung
Proto Das Protokoll: unix, tcp oder udp. IP-Version-6-Verbindungen werden durch eine angehängte "6" gekennzeichnet.
Local Address Die IP-Adresse oder der DNS-Name der Schnittstelle, über die diese Verbindung läuft, sowie durch einen Doppelpunkt abgetrennt die Portnummer. Die IP-Adresse ist entweder eine der gültigen Adressen, unter der der Rechner im Netz zu erreichen ist, oder eine der folgenden:
127.0.0.1 - Loopback-Gerät. Die Verbindungen laufen lokal auf dem Rechner ohne Kontakt mit dem Netz.
0.0.0.0 - Universal-Adresse. Dieser Socket lauscht an allen verfügbaren Netzwerkschnittstellen.
::1 - Loopback-Gerät unter IP-Version 6.
:: - Universal-Adresse unter IP-Version 6.
Foreign Address Adresse und Port der Gegenstelle der Verbindung. Die jeweilige Universal-Adresse (0.0.0.0 bzw. ::) bedeutet, dass hier ein Dienst auf Verbindungen von außen wartet.
State Status der Verbindung. UDP ist ein statusloses Protokoll, deswegen ist diese Spalte bei UDP-Sockets leer.
Benutzer Die Benutzer-ID, der das Socket gehört.
PID/Program name Prozess-ID und Programmname des Prozesses, dem das Socket gehört.

Die Tabelle für Unix-Domain-Sockets sieht etwas anders aus. Hier gibt es neben der Proto-Spalte u.a. diese hier:

Name Beschreibung
Typ STREAM oder DGRAM. Entspricht in etwa TCP oder UDP bei den Internetverbindungen. DGRAM kennt, im Gegensatz zu STREAM, keine Verbindungszustände.
Zustand Entspricht der Spalte State bei den Internetverbindungen. Komischerweise ist der Unix-Domain-Teil von netstat komplett in deutsch lokalisiert, während der Name der Spalte und einige Statusbezeichnungen bei den Internetverbindungen auf englisch ausgegeben werden.
PID/Program name s.o.
Pfad Unix-Domain-Sockets existieren im Dateibaum als spezielle Dateien. Der Zugriff wird, wie bei Dateien üblich, über die Dateirechte geregelt. Wo sich die jeweilige Datei befindet, steht in dieser Spalte.