[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] '''netstat''' ist ein Diagnose-Werkzeug, mit dem man verschiedene Informationen über den Status der Netzwerkschnittstelle(n) in Erfahrung bringen kann. Eine Alternative ist das Programm '''ss''' (socket state) aus dem Paket [:ip:iproute]. = Installation = Das Programm netstat ist im Paket '''net-tools''' enthalten. Dieses Paket ist bis Ubuntu 16.04 vorinstalliert und kann in neueren Ubuntu-Versionen wie folgt installiert werden: {{{#!vorlage Paketinstallation net-tools, main }}} = Syntax = Die allgemeine Syntax von netstat ist recht einfach: {{{#!vorlage Befehl 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: {{{#!vorlage 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 [#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 [:man: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-[wikipedia:Socket: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 [wikipedia:Network_Address_Translation:Network Address Translation]. || || ``--groups`` || ``-g`` || Informationen über [wikipedia:Multicast: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 [wikipedia:Internet_Protocol:IP-Sockets] {de} 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 [wikipedia:Transmission_Control_Protocol:TCP-Sockets] an. || || ``--udp`` || ``-u`` || Zeige nur [wikipedia:User_Datagram_Protocol: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 [wikipedia:Domain_Name_System: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: {{{#!vorlage Befehl $ 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:[[BR]]``127.0.0.1`` - Loopback-Gerät. Die Verbindungen laufen lokal auf dem Rechner ohne Kontakt mit dem Netz.[[BR]]``0.0.0.0`` - Universal-Adresse. Dieser Socket lauscht an allen verfügbaren Netzwerkschnittstellen.[[BR]]``::1`` - Loopback-Gerät unter IP-Version 6.[[BR]]``::`` - 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. || = Links = * [http://ubuntuhandbook.org/index.php/2013/12/qnetstatview-network-viewer-linux/ QNetStatView – QT Graphical Network Connections Viewer for Linux] {en} - grafische Oberfläche für netstat (Blogbeitrag 12/2013) * [:Shell/Befehlsübersicht:] {Übersicht} Übersicht über verschiedene Shell-Befehle * [:Netzwerk-Monitoring:] {Übersicht} Übersicht über verschiedene Netzwerk-Monitoring Programme # tag: Netzwerk, Shell, System