Netstat
Netstat ist ein Befehlszeilendienstprogramm, das verwendet werden kann, um alle Netzwerk-(Socket-)Verbindungen auf einem System aufzulisten. Es listet alle TCP-, UDP-Socket-Verbindungen und die Unix-Socket-Verbindungen auf.
Abgesehen von verbundenen Sockets kann es auch lauschende Sockets auflisten, die auf eingehende Verbindungen warten. Indem Sie also einen offenen Port 80 verifizieren, können Sie bestätigen, ob ein Webserver auf dem System läuft oder nicht.
Dies macht es zu einem sehr nützlichen Werkzeug für Netzwerk- und Systemadministratoren.
In diesem Tutorial sehen wir uns einige Beispiele an, wie man netstat verwendet, um Informationen über Netzwerkverbindungen und offene Ports auf einem System zu finden.
Hier ist eine kurze Einführung in netstat von den Manpages
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
1. Alle Verbindungen auflisten
Der erste und einfachste Befehl besteht darin, alle aktuellen Verbindungen aufzulisten. Führen Sie einfach den Befehl netstat mit der Option a aus.
$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED tcp 0 0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN udp 0 0 enlightened:domain *:* udp 0 0 *:bootpc *:* udp 0 0 enlightened.local:ntp *:* udp 0 0 localhost:ntp *:* udp 0 0 *:ntp *:* udp 0 0 *:58570 *:* udp 0 0 *:mdns *:* udp 0 0 *:49459 *:* udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* udp6 0 0 ip6-localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:* udp6 0 0 [::]:mdns [::]:* udp6 0 0 [::]:63811 [::]:* udp6 0 0 [::]:54952 [::]:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 12403 @/tmp/dbus-IDgfj3UGXX unix 2 [ ACC ] STREAM LISTENING 40202 @/dbus-vfs-daemon/socket-6nUC6CCx
Der obige Befehl zeigt alle Verbindungen von verschiedenen Protokollen wie TCP, UDP und Unix-Sockets. Dies ist jedoch nicht ganz sinnvoll. Administratoren möchten häufig bestimmte Verbindungen beispielsweise anhand von Protokollen oder Portnummern auswählen.
2. Nur TCP- oder UDP-Verbindungen auflisten
Um nur TCP-Verbindungen aufzulisten, verwenden Sie die t-Optionen.
$ netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:36310 del01s07-in-f24.1:https ESTABLISHED tcp 0 0 enlightened.local:45038 a96-17-181-10.depl:http ESTABLISHED tcp 0 0 enlightened.local:37892 ABTS-North-Static-:http ESTABLISHED .....
Um nur UDP-Verbindungen aufzulisten, verwenden Sie die Option u.
$ netstat -au Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 *:34660 *:* udp 0 0 enlightened:domain *:* udp 0 0 *:bootpc *:* udp 0 0 enlightened.local:ntp *:* udp 0 0 localhost:ntp *:* udp 0 0 *:ntp *:* udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* udp6 0 0 ip6-localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:*
Die obige Ausgabe zeigt sowohl IPv4- als auch IPv6-Verbindungen.
3. Reverse-DNS-Lookup für schnellere Ausgabe deaktivieren
Standardmäßig versucht der Befehl netstat, den Hostnamen jeder IP-Adresse in der Verbindung herauszufinden, indem er eine umgekehrte DNS-Suche durchführt. Dadurch wird die Ausgabe verlangsamt. Wenn Sie den Hostnamen nicht wissen müssen und nur die IP-Adresse ausreicht, unterdrücken Sie die Suche nach dem Hostnamen mit der Option n.
$ netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 192.168.1.2:49058 173.255.230.5:80 ESTABLISHED tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED tcp6 0 0 ::1:631 :::* LISTEN
Der obige Befehl zeigt ALLE TCP-Verbindungen ohne DNS-Auflösung. Ich habs ? Gut.
4. Hörverbindungen prüfen – Ports öffnen
Jeder Netzwerk-Daemon/Dienst behält einen offenen Port, um auf eingehende Verbindungen zu lauschen. Auch diese sind wie Socket-Verbindungen und werden von netstat aufgelistet. Um nur Listening Ports anzuzeigen, verwenden Sie die Option "-l".
$ netstat -tnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp6 0 0 ::1:631 :::* LISTEN
Jetzt können wir nur lauschende TCP-Ports/Verbindungen sehen. Wenn Sie alle Listening-Ports sehen möchten, entfernen Sie die Option t. Wenn Sie nur lauschende UDP-Ports sehen möchten, verwenden Sie die Option "-u" anstelle von "-t".
Achten Sie darauf, die Option "-a" zu entfernen, da sonst alle Verbindungen aufgelistet werden und nicht nur die lauschenden Verbindungen.
Wenn Sie einen Dienst wie http oder smtp auf Ihrem Linux-Server ausführen, können Sie den obigen Befehl verwenden, um zu überprüfen, ob der Dienst auf eingehende Verbindungen wartet oder nicht.
5. Prozessname/PID und Benutzer-ID abrufen
Beim Anzeigen der offenen/lauschenden Ports und Verbindungen ist es oft hilfreich, den Prozessnamen/PID zu kennen, der diesen Port oder diese Verbindung geöffnet hat.
Zum Beispiel öffnet der Apache httpd-Server Port 80. Wenn Sie also überprüfen möchten, ob irgendein http-Server läuft oder nicht, oder welcher http-Server läuft, Apache oder nginx, dann suchen Sie den Prozessnamen auf.
Die Prozessdetails werden durch die Option 'p' zur Verfügung gestellt.
~$ sudo netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1144/dnsmasq tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 661/cupsd tcp6 0 0 ::1:631 :::* LISTEN 661/cupsd
Wenn die Option p verwendet wird, muss netstat mit Root-Rechten ausgeführt werden, da es sonst die PIDs von Prozessen, die mit Root-Rechten laufen, nicht erkennen kann, und die meisten Dienste wie http und ftp werden oft mit Root-Rechten ausgeführt.
Zusammen mit Prozessname/PID ist es sogar noch nützlicher, den Benutzernamen/UID zu erhalten, dem dieser bestimmte Prozess gehört. Verwenden Sie die Option e zusammen mit der Option p, um auch den Benutzernamen zu erhalten.
$ sudo netstat -ltpe Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 enlightened:domain *:* LISTEN root 11090 1144/dnsmasq tcp 0 0 localhost:ipp *:* LISTEN root 9755 661/cupsd tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN root 9754 661/cupsd
Das obige Beispiel listet Listening-Verbindungen vom Typ Tcp mit Prozessinformationen und erweiterten Informationen auf.
Die erweiterten Informationen enthalten den Benutzernamen und den Inode des Prozesses. Dies ist ein nützlicher Befehl für Netzwerkadministratoren.
Hinweis - Wenn Sie die Option n zusammen mit der Option e verwenden, wird die uid aufgelistet und nicht der Benutzername.
6. Statistiken drucken
Der Befehl netstat kann auch Netzwerkstatistiken wie die Gesamtzahl der empfangenen und gesendeten Pakete nach Protokolltyp usw. ausdrucken.
Statistiken aller Pakettypen auflisten
$ netstat -s Ip: 32797 total packets received 0 forwarded 0 incoming packets discarded 32795 incoming packets delivered 29115 requests sent out 60 outgoing packets dropped Icmp: 125 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 125 125 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 125 ... OUTPUT TRUNCATED ...
Um Statistiken nur ausgewählter Protokolle wie TCP oder UDP auszudrucken, verwenden Sie die entsprechenden Optionen wie t und u zusammen mit der Option s. Ganz einfach!
7. Informationen zum Kernel-Routing anzeigen
Die Kernel-Routing-Informationen können mit der Option r gedruckt werden. Es ist die gleiche Ausgabe wie beim route-Befehl. Wir verwenden auch die Option n, um die Suche nach Hostnamen zu deaktivieren.
$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
8. Netzwerkschnittstellen drucken
Der Befehl netstat kann auch die Informationen über die Netzwerkschnittstellen ausgeben. Die Option "-i" erledigt die Aufgabe.
$ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 31611 0 0 0 27503 0 0 0 BMRU lo 65536 0 2913 0 0 0 2913 0 0 0 LRU
Die obige Ausgabe enthält Informationen in einem sehr rohen Format. Um eine benutzerfreundlichere Version der Ausgabe zu erhalten, verwenden Sie die Option e zusammen mit i.
$ netstat -ie Kernel Interface table eth0 Link encap:Ethernet HWaddr 00:16:36:f8:b2:64 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::216:36ff:fef8:b264/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:31682 errors:0 dropped:0 overruns:0 frame:0 TX packets:27573 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:29637117 (29.6 MB) TX bytes:4590583 (4.5 MB) Interrupt:18 Memory:da000000-da020000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:2921 errors:0 dropped:0 overruns:0 frame:0 TX packets:2921 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:305297 (305.2 KB) TX bytes:305297 (305.2 KB)
Die obige Ausgabe ähnelt der Ausgabe des ifconfig-Befehls.
9. Kontinuierliche netstat-Ausgabe erhalten
Netstat kann mit der Option c kontinuierlich Verbindungsinformationen ausgeben.
$ netstat -ct
Der obige Befehl gibt kontinuierlich TCP-Verbindungen aus.
10. Informationen zu Multicast-Gruppen anzeigen
Die Option g zeigt die Multicast-Gruppeninformationen für IPv4- und IPv6-Protokolle an.
$ netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 all-systems.mcast.net eth0 1 224.0.0.251 eth0 1 all-systems.mcast.net lo 1 ip6-allnodes lo 1 ff01::1 eth0 1 ff02::fb eth0 1 ff02::1:fff8:b264 eth0 1 ip6-allnodes eth0 1 ff01::1 wlan0 1 ip6-allnodes wlan0 1 ff01::1
Weitere Beispiele für den netstat-Befehl
Okay, wir haben die grundlegenden Beispiele des netstat-Befehls oben behandelt. Jetzt ist es an der Zeit, Geek-Sachen mit Stil zu machen.
Aktive Verbindungen drucken
Aktive Socket-Verbindungen befinden sich im Zustand „HERGESTELLT“. Um also alle aktuellen aktiven Verbindungen zu erhalten, verwenden Sie netstat mit grep wie folgt
$ netstat -atnp | grep ESTA (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 192.168.1.2:49156 173.255.230.5:80 ESTABLISHED 1691/chrome tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED 1691/chrome
Um eine fortlaufende Liste aktiver Verbindungen anzuzeigen, verwenden Sie den watch-Befehl zusammen mit netstat und grep
$ watch -d -n0 "netstat -atnp | grep ESTA"
Überprüfen Sie, ob ein Dienst ausgeführt wird
Wenn Sie überprüfen möchten, ob ein Server wie http, smtp oder ntp läuft oder nicht, verwenden Sie erneut grep.
$ sudo netstat -aple | grep ntp udp 0 0 enlightened.local:ntp *:* root 17430 1789/ntpd udp 0 0 localhost:ntp *:* root 17429 1789/ntpd udp 0 0 *:ntp *:* root 17422 1789/ntpd udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* root 17432 1789/ntpd udp6 0 0 ip6-localhost:ntp [::]:* root 17431 1789/ntpd udp6 0 0 [::]:ntp [::]:* root 17423 1789/ntpd unix 2 [ ] DGRAM 17418 1789/ntpd
Wir haben also festgestellt, dass der NTP-Server läuft. Grep für http oder smtp oder was auch immer Sie suchen.
Schlussfolgerung
Nun, das war das meiste, wofür netstat verwendet wird. Wenn Sie nach weiterführenden Informationen suchen oder tiefer graben möchten, lesen Sie das netstat-Handbuch (man netstat).
Und hinterlassen Sie Ihr Feedback und Ihre Vorschläge im Kommentarfeld unten.
Ressourcen
Sehen Sie sich die Linux-Handbuchseite für netstat an, um mehr zu erfahren.
https://linux.die.net/man/8/netstat
https://man7.org/linux/man-pages/man8/netstat.8.html