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.