Lernen Sie, was der Befehl netstat ist und einige Beispiele in Echtzeit.
netstat
(Netzwerkstatistik) ist ein Befehlszeilentool, das Netzwerkverbindungen (sowohl eingehende als auch ausgehende), Routing-Tabellen und eine Reihe von Netzwerkschnittstellenstatistiken anzeigt.
Es ist auf Linux-, Unix-ähnlichen und Windows-Betriebssystemen verfügbar. netstat
ist sehr leistungsfähig und kann ein praktisches Tool sein, um netzwerkbezogene Probleme zu beheben und Verbindungsstatistiken zu überprüfen.
Wenn Sie netstat -help
eingeben, erhalten Sie die folgenden Hinweise zur Verwendung.
[root@lab ~]# netstat -help
verwendung: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]
-r, --route Anzeige der Routing-Tabelle
-I, --interfaces=<Iface> Schnittstellentabelle für <Iface> anzeigen
-i, --interfaces Schnittstellentabelle anzeigen
-g, --groups zeigt Multicast-Gruppenmitgliedschaften an
-s, --statistics Netzwerkstatistiken anzeigen (wie SNMP)
-M, --masquerade zeigt maskierte Verbindungen an
-v, --verbose Ausführlich sein
-W, --wide schneidet IP-Adressen nicht ab
-n, --numeric löst keine Namen auf
--numeric-hosts löst keine Hostnamen auf
--numeric-ports löst keine Portnamen auf
--numeric-users löst keine Benutzernamen auf
-N, --symbolisch Hardware-Namen auflösen
-e, --extend zeigt andere/mehr Informationen an
-p, --programs zeigt PID/Programmnamen für Sockets an
-o, --timers Anzeige der Zeitschaltuhren
-c, --continuous kontinuierliche Auflistung
-l, --listening Anzeige der Listening-Server-Sockets
-a, --all zeigt alle Sockets an (Standard: verbunden)
-F, --fib zeigt Forwarding Information Base an (Voreinstellung)
-C, --cache Anzeige des Routing-Cache anstelle der FIB
-Z, --context SELinux Sicherheitskontext für Sockets anzeigen
<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Verwenden Sie '-6|-4' oder '-A <af>' oder '--<af>'; Standard: inet
Liste der möglichen Adressfamilien (die Routing unterstützen):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
[root@lab ~]#
Lassen Sie mich Ihnen einige Beispiele für den Befehl zeigen. Die folgenden Beispiele wurden auf RHEL/CentOS getestet, aber ich sehe keinen Grund, warum sie nicht auch auf anderen Distributionen wie Ubuntu funktionieren sollten.
Hergestellte Verbindung
Wenn Sie nach allen bestehenden Verbindungen des Servers suchen.
[root@lab ~]# netstat -natu | grep 'ESTABLISHED'
tcp 0 21 68.183.37.102:22 222.186.31.135:21714 ESTABLISHED
tcp 0 36 68.183.37.102:22 52.148.155.182:49859 ESTABLISHED
tcp 0 0 68.183.37.102:22 61.177.142.158:55481 ESTABLISHED
[root@lab ~]#
Wenn Sie viele bestehende Verbindungen haben und nach einer der IPs suchen möchten, können Sie ein anderes grep verwenden.
[root@lab ~]# netstat -natu | grep 'ESTABLISHED' | grep 61.177.142.158
tcp 0 1280 68.183.37.102:22 61.177.142.158:33932 ESTABLISHED
[root@lab ~]#
Abhörende Verbindung
Angenommen, Sie haben einen Dienst gestartet, der auf einer bestimmten IP:Port lauschen soll, dann wäre es praktisch, dies zu überprüfen.
[root@lab ~]# netstat -an | grep 'LISTEN'
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
[root@lab ~]#
Oder Sie können das Argument -l
verwenden, um alle lauschenden Sockets anzuzeigen.
[root@lab ~]# netstat -l
Aktive Internetverbindungen (nur Server)
Proto Recv-Q Send-Q Lokale Adresse Fremde Adresse Status
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
tcp6 0 0 [::]:webcache [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
udp 0 0 0.0.0.0:805 0.0.0.0:*
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp6 0 0 [::]:805 [::]:*
udp6 0 0 [::]:sunrpc [::]:*
udp6 0 0 ip6-localhost:323 [::]:*
Aktive UNIX-Domänen-Sockets (nur Server)
Proto RefCnt Flags Typ Zustand I-Node Pfad
unix 2 [ ACC ] STREAM LISTENING 15108 /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 8202 /run/systemd/journal/stdout
unix 2 [ ACC ] SEQPACKET LISTENING 12813 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 17542 public/pickup
unix 2 [ ACC ] STREAM LISTENING 15165 /var/run/rpcbind.sock
unix 2 [ ACC ] STREAM LISTENING 17546 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 15605 /var/lib/gssproxy/default.sock
unix 2 [ ACC ] STREAM LISTENING 12706 /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 17549 public/qmgr
unix 2 [ ACC ] STREAM LISTENING 17571 public/flush
unix 2 [ ACC ] STREAM LISTENING 17553 private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 17586 public/showq
unix 2 [ ACC ] STREAM LISTENING 17556 private/rewrite
unix 2 [ ACC ] STREAM LISTENING 17559 privat/bounce
unix 2 [ ACC ] STREAM LISTENING 17562 privat/defer
unix 2 [ ACC ] STREAM LISTENING 17565 privat/trace
unix 2 [ ACC ] STREAM LISTENING 17568 privat/überprüfen
unix 2 [ ACC ] STREAM LISTENING 17574 privat/proxymap
unix 2 [ ACC ] STREAM LISTENING 17577 privat/proxywrite
unix 2 [ ACC ] STREAM LISTENING 17580 privat/smtp
unix 2 [ ACC ] STREAM LISTENING 17583 privat/relay
unix 2 [ ACC ] STREAM LISTENING 17589 private/error
unix 2 [ ACC ] STREAM LISTENING 17592 privat/wiederholen
unix 2 [ ACC ] STREAM LISTENING 17595 privat/verwerfen
unix 2 [ ACC ] STREAM LISTENING 17598 privat/lokal
unix 2 [ ACC ] STREAM LISTENING 17601 privat/virtuell
unix 2 [ ACC ] STREAM LISTENING 17604 privat/lmtp
unix 2 [ ACC ] STREAM LISTENING 17607 privat/anvil
unix 2 [ ACC ] STREAM LISTENING 17610 privat/scache
unix 2 [ ACC ] STREAM LISTENING 15606 /run/gssproxy.sock
[root@lab ~]#
Nutzen Sie grep
, um die Ergebnisse zu filtern.
Von der PID verwendete Portnummer
Sie wissen, dass Ihre Anwendung gestartet wurde und kennen die PID (Process Identifier), sind sich aber nicht sicher, welche Portnummer sie verwendet. Das folgende Beispiel bezieht sich auf PID 3937
[root@lab ~]# netstat -anlp |grep 3937
tcp6 0 0 :::80 :::* LISTEN 3937/httpd
unix 3 [ ] STREAM CONNECTED 2442387 3937/httpd
[root@lab ~]#
Wie Sie sehen können, wird Port 80 für die PID 3937 verwendet.
Alle Protokolle Statistik
Bei häufigen Verbindungsabbrüchen aufgrund von verworfenen Paketen? -das Argument netstat -s
zeigt Ihnen eine Gesamtstatistik an, in der Sie auf die verworfenen Pakete achten können.
[root@lab ~]# netstat -s
Ip:
731422 insgesamt empfangene Pakete
0 weitergeleitet
0 verworfene eingehende Pakete
731399 eingehende Pakete zugestellt
787732 gesendete Anfragen
16 verworfen wegen fehlender Route
Icmp:
5277 empfangene ICMP-Nachrichten
120 ICMP-Eingangsmeldungen fehlgeschlagen.
InCsumErrors: 6
ICMP-Eingabe-Histogramm:
ziel unerreichbar: 193
zeitüberschreitung im Transit: 16
echo-Anfragen: 5060
echo-Antworten: 2
9355 gesendete ICMP-Nachrichten
0 ICMP-Nachrichten fehlgeschlagen
ICMP-Ausgabe-Histogramm:
ziel unerreichbar: 4295
echo-Antworten: 5060
IcmpMsg:
InType0: 2
InType3: 193
InType8: 5060
InType11: 16
AusTyp0: 5060
AusTyp3: 4295
Tcp:
42 aktive Verbindungsöffnungen
35226 passive Verbindungseröffnungen
1693 fehlgeschlagene Verbindungsversuche
645 empfangene Verbindungsrückstellungen
2 hergestellte Verbindungen
646705 empfangene Segmente
648037 gesendete Segmente
99463 Segmente erneut übertragen
27377 fehlerhafte Segmente empfangen.
150893 Resets gesendet
InCsumFehler: 27377
Udp:
74547 Pakete empfangen
4814 Pakete an unbekannten Port empfangen.
56 Fehler beim Empfang von Paketen
74584 Pakete gesendet
0 Empfangspufferfehler
0 Sendepuffer-Fehler
InCsumErrors: 56
UdpLite:
TcpExt:
177 ungültige SYN-Cookies empfangen
1693 empfangene Rücksetzungen für embryonale SYN_RECV-Sockets
316 TCP-Sockets beendeten die Wartezeit im Fast Timer
3 zurückgewiesene Pakete in bestehenden Verbindungen wegen Zeitstempel
70248 verzögerte Acks gesendet
6 verzögerte Acks weiter verzögert wegen gesperrtem Socket
Der Quick-Ack-Modus wurde 3082 Mal aktiviert
17 SYNs an LISTEN-Sockel verworfen
28179 Pakete direkt in die recvmsg-Warteschlange gestellt.
9802 Bytes direkt im Prozesskontext von der Prequeue empfangen
72106 Paket-Kopfzeilen vorhergesagt
94182 Acknowledgments, die keine Daten-Nutzlast enthalten, empfangen
40094 vorhergesagte Acknowledgments
332 Mal von Paketverlusten durch selektive Bestätigungen erholt
8 Überlastungsfenster ohne langsamen Start durch DSACK wiederhergestellt
1173 Überlastungsfenster ohne langsamen Start nach partiellem Ack wiederhergestellt
1029 Zeitüberschreitungen nach SACK-Wiederherstellung
8 Zeitüberschreitungen im Verlustzustand
329 schnelle Neuübertragungen
3 Vorwärts-Wiederübertragungen
32 erneute Übertragungen bei langsamem Start
44785 andere TCP-Zeitüberschreitungen
TCPLossProbes: 9763
TCPLossProbeWiederherstellung: 1732
54 SACK-Wiederholungsübertragungen fehlgeschlagen
3144 DSACKs für alte Pakete gesendet
4 DSACKs für unvollständige Pakete gesendet
695 DSACKs empfangen
1 DSACKs für kaputte Pakete empfangen
44 Verbindungen wegen unerwarteter Daten zurückgesetzt
76 Verbindungen zurückgesetzt wegen vorzeitiger Beendigung durch den Benutzer
6079 Verbindungen wegen Zeitüberschreitung abgebrochen
TCPDSACKIgnoredNoUndo: 448
TCPSpuriousRTOs: 5
TCPSackShiftFallback: 465
IPReversePathFilter: 11
TCPRcvCoalesce: 32369
TCPOFOQueue: 4313
TCPOFOMerge: 4
TCPChallengeACK: 2
TCPSynRetrans: 43670
TCPOrigDataSent: 208010
TCPACKSkippedSeq: 12
IpExt:
InNoRoutes: 12
InOctets: 133789295
OutOctets: 151093769
InNoECTPkts: 731338
InECT1Pkts: 3
InECT0Pkts: 1568
InCEPkts: 108
[root@lab ~]#
Kernel-Routing-Informationen
Haben Sie ein Routing-Problem oder funktioniert die Verbindung nicht wie erwartet, weil die Verbindung über eine andere Route läuft?
Prüfen Sie schnell die Routing-Tabelle.
[root@lab ~]# netstat -r
Kernel IP-Routing-Tabelle
Ziel-Gateway Genmask Flags MSS Window irtt Iface
standard-Gateway 0.0.0.0 UG 0 0 0 eth0
10.16.0.0 0.0.0 255.255.0.0 U 0 0 0 eth0
68.183.32.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth0
[root@lab ~]#
PID verwendet von Portnummer
Sehr praktisch, um Portkonflikte zu beheben. Nehmen wir an, Sie versuchen, einen Apache- oder Nginx-Server zu starten, der auf Port 80 lauscht, was aber nicht möglich ist, weil ein anderer Prozess bereits Port 80 verwendet.
[root@lab ~]# netstat -anlp |grep 80 | grep LISTEN
tcp6 0 0 :::80 :::* LISTEN 3937/httpd
[root@lab ~]#
Und Sie können sehen, dass die PID 3937 diesen Port verwendet.
Wenn Sie AIX verwenden, dann
netstat -Aan | grep $portnumber
Dies zeigt die Adresse des Protocol Control Blocks in hexadezimaler Form an
Sobald Sie die hexadezimalen Werte haben, können Sie die folgenden Befehle ausführen, um herauszufinden, welcher Prozess eine Portnummer hält.
rmsock $Adresse_von_pcb tcpcb
Liste der Netzwerkschnittstellen
Haben Sie mehrere Ethernet-Schnittstellen oder sind Sie sich nicht sicher und wollen es herausfinden?
[root@lab ~]# netstat -i
Kernel Interface Tabelle
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 793026 0 0 0 849443 0 0 0 BMRU
lo 65536 6 0 0 0 6 0 0 0 LRU
[root@lab ~]#
Kontinuierliches Mithören
Eine ausgezeichnete Option bei der Fehlersuche im Zusammenhang mit dem Absturz von Diensten. Nehmen wir an, eine Anwendung stürzt zufällig alle paar Minuten ab. Aber Sie sind nicht sicher, wann genau. Sie können das Argument -c
verwenden, um die Ergebnisse kontinuierlich anzuzeigen.
[root@lab ~]# netstat -anlpc |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd
Wenn er sich nicht mehr aktualisiert, wissen Sie, dass er abgestürzt ist.
Fazit
netstat
ist einer der von Sysadmin am häufigsten verwendeten Befehle und ich hoffe, dass die obigen Beispiele Ihnen eine Vorstellung davon geben, was Sie damit tun können. Wenn Sie mehr über Linux-Administration lernen möchten, dann schauen Sie sich diesen Udemy-Kurs an.