So prüfen Sie, ob ein bestimmter Netzwerksocket in Linux geöffnet ist

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie prüfen können, ob ein bestimmter Netzwerksocket in Linux geöffnet ist. Das Verständnis, wie man aktive Netzwerksockets identifiziert und untersucht, ist eine grundlegende Fähigkeit für die Netzwerkfehlersuche und -überwachung.

Durch praktische Übungen nutzen Sie leistungsstarke Befehlszeilentools wie ss und netstat, um Netzwerkverbindungen aufzulisten und zu filtern. Sie werden auch das Dateisystem /proc/net erkunden, um tiefere Einblicke in die Socketdetails zu erhalten. Dies bietet einen umfassenden Ansatz zur Überprüfung des Status von Netzwerksockets auf Ihrem System.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") subgraph Lab Skills linux/cat -.-> lab-558761{{"So prüfen Sie, ob ein bestimmter Netzwerksocket in Linux geöffnet ist"}} linux/netstat -.-> lab-558761{{"So prüfen Sie, ob ein bestimmter Netzwerksocket in Linux geöffnet ist"}} end

Prüfen von Sockets mit ss -tuln

In diesem Schritt lernen Sie, wie Sie den Befehl ss verwenden, um Netzwerksockets auf Ihrem Linux-System zu untersuchen. Sockets sind Endpunkte für das Senden und Empfangen von Daten über ein Netzwerk. Das Verständnis, wie man aktive Sockets anzeigt, ist für die Netzwerkfehlersuche und -überwachung von entscheidender Bedeutung.

Der Befehl ss ist ein leistungsstarkes Tool zur Untersuchung von Sockets. Wir werden ihn mit den folgenden Optionen verwenden:

  • -t: Zeigt TCP-Sockets an.
  • -u: Zeigt UDP-Sockets an.
  • -l: Zeigt lauschende Sockets (Sockets, die auf Verbindungen warten) an.
  • -n: Löst keine Dienstnamen auf (zeigt stattdessen Portnummern an).

Öffnen Sie Ihr Terminal, wenn es noch nicht geöffnet ist. Sie können das Xfce Terminal-Symbol auf der linken Seite Ihres Desktops finden.

Geben Sie jetzt den folgenden Befehl ein und drücken Sie die Eingabetaste:

ss -tuln

Sie werden eine Ausgabe ähnlich der folgenden sehen:

Netid State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
tcp   LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:631                    0.0.0.0:*
tcp   LISTEN     0      128    0.0.0.0:5900                     0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:25                     0.0.0.0:*
tcp   LISTEN     0      128    [::]:22                          [::]:*
tcp   LISTEN     0      128    [::1]:631                        [::]:*
tcp   LISTEN     0      128    [::]:5900                        [::]:*
tcp   LISTEN     0      128    [::1]:25                         [::]:*
udp   UNCONN     0      0      127.0.0.1:323                    0.0.0.0:*
udp   UNCONN     0      0      0.0.0.0:631                      0.0.0.0:*
udp   UNCONN     0      0      [::1]:323                        [::]:*
udp   UNCONN     0      0      [::]:631                         [::]:*

Lassen Sie uns die Ausgabe analysieren:

  • Netid: Der Typ des Sockets (z.B. tcp, udp).
  • State: Der Zustand des Sockets (z.B. LISTEN bedeutet, dass er auf eine Verbindung wartet).
  • Recv-Q: Die Anzahl der empfangenen Bytes in der Warteschlange.
  • Send-Q: Die Anzahl der gesendeten Bytes in der Warteschlange.
  • Local Address:Port: Die lokale IP-Adresse und die Portnummer, an die der Socket gebunden ist. 0.0.0.0 und [::] geben an, dass der Socket auf allen verfügbaren Netzwerkschnittstellen lauscht (IPv4 bzw. IPv6).
  • Peer Address:Port: Die entfernte IP-Adresse und die Portnummer, mit der der Socket verbunden ist. * gibt an, dass der Socket auf Verbindungen von jeder entfernten Adresse wartet.

Diese Ausgabe zeigt Ihnen, welche Dienste auf Ihrem System laufen und auf Verbindungen warten. Beispielsweise können Sie sehen, dass SSH (Port 22), CUPS (Port 631), VNC (Port 5900) und der Mailserver (Port 25) lauschen.

Das Verständnis dieser Ausgabe ist der erste Schritt bei der Diagnose von Netzwerkverbindungsfehlern oder der Identifizierung möglicherweise unerwünschter Dienste, die auf Ihrem System laufen.

Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.

Prüfen von Sockets mit netstat -tuln

In diesem Schritt verwenden Sie einen anderen Befehl, netstat, um die Netzwerksockets zu prüfen. netstat ist ein älterer Befehl im Vergleich zu ss, wird aber immer noch weit verbreitet eingesetzt und liefert ähnliche Informationen über Netzwerkverbindungen, Routingtabellen und Schnittstellenstatistiken.

Wir werden netstat mit den gleichen Optionen wie ss verwenden, um die lauschenden TCP- und UDP-Sockets anzuzeigen, ohne Dienstnamen aufzulösen:

  • -t: Zeigt TCP-Sockets an.
  • -u: Zeigt UDP-Sockets an.
  • -l: Zeigt lauschende Sockets an.
  • -n: Löst keine Dienstnamen auf.

Geben Sie den folgenden Befehl in Ihrem Terminal ein und drücken Sie die Eingabetaste:

netstat -tuln

Sie werden eine Ausgabe ähnlich der folgenden sehen:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 :::5900                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:631             0.0.0.0:*
udp6       0      0 ::1:323                 :::*
udp6       0      0 :::631                  :::*

Beachten Sie, dass die Ausgabe von netstat -tuln der Ausgabe von ss -tuln sehr ähnlich ist. Beide Befehle liefern Informationen über das Protokoll (Proto), die lokale Adresse und den Port (Local Address), die fremde Adresse und den Port (Foreign Address) sowie den Zustand der Verbindung (State).

Während ss im Allgemeinen für komplexe Szenarien schneller und informativer angesehen wird, ist netstat dennoch ein wertvolles Werkzeug in Ihrem Linux-Befehlsarsenal. Es ist eine gute Praxis, sich mit beiden vertraut zu machen.

Sie haben nun erfolgreich sowohl ss als auch netstat verwendet, um lauschende Sockets anzuzeigen. Dies ist eine grundlegende Fähigkeit für das Verständnis der Netzwerkaktivität auf Ihrem System.

Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.

Untersuchung von Socket-Details in /proc/net

In diesem Schritt werden Sie das Verzeichnis /proc/net erkunden, das detaillierte Informationen über den Netzwerkstapel und Netzwerkprotokolle im Linux-Kernel bereitstellt. Hierher beziehen Befehle wie ss und netstat ihre Daten.

Das /proc-Dateisystem ist ein virtuelles Dateisystem, das Informationen über Prozesse und andere Systeminformationen liefert. Es ist eine leistungsstarke Methode, um den internen Zustand des Kernels zu untersuchen.

Innerhalb von /proc/net finden Sie Dateien, die Rohdaten über Netzwerkverbindungen enthalten. Beispielsweise enthalten tcp, udp, tcp6 und udp6 Informationen über aktive TCP- und UDP-Sockets (jeweils IPv4 und IPv6).

Schauen wir uns den Inhalt der tcp-Datei an. Geben Sie den folgenden Befehl in Ihrem Terminal ein und drücken Sie die Eingabetaste:

cat /proc/net/tcp

Sie werden eine Ausgabe sehen, die in etwa so aussieht:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
   0: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 12345 1 0000000000000000 0
   1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 67890 1 0000000000000000 0
   ... (mehr Zeilen)

Diese Ausgabe ist weniger menschenlesbar als die von ss oder netstat, da es sich um Rohdaten aus dem Kernel handelt. Jede Zeile repräsentiert einen TCP-Socket und enthält verschiedene Felder, darunter:

  • sl: Der Index in der Socket-Liste.
  • local_address: Die lokale IP-Adresse und der Port im hexadezimalen Format. 0100007F ist die hexadezimale Darstellung von 127.0.0.1 (Loopback-Adresse), und 0019 ist die hexadezimale Darstellung von Port 25.
  • rem_address: Die entfernte IP-Adresse und der Port im hexadezimalen Format.
  • st: Der Zustand des Sockets (z.B. repräsentiert 0A LISTEN).
  • tx_queue: Die Größe der Sendewarteschlange.
  • rx_queue: Die Größe der Empfangswarteschlange.
  • uid: Die Benutzer-ID, die den Socket besitzt.
  • inode: Die Inode-Nummer des Sockets.

Sie können auch UDP-Sockets anzeigen, indem Sie sich die Datei /proc/net/udp ansehen:

cat /proc/net/udp

Und für IPv6-Sockets können Sie /proc/net/tcp6 und /proc/net/udp6 prüfen.

Obwohl Sie diese Dateien normalerweise nicht direkt für den täglichen Gebrauch analysieren werden, bietet das Verständnis, dass hier die Netzwerkinformationen ihren Ursprung haben, einen tieferen Einblick in die Art und Weise, wie Linux Netzwerkverbindungen verwaltet. Befehle wie ss und netstat lesen im Wesentlichen die Daten aus diesen Dateien und formatieren sie für ein leichteres Verständnis.

Sie haben nun die Rohinformationen über Sockets im /proc/net-Dateisystem erkundet.

Klicken Sie auf Weiter, um das Lab abzuschließen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie mithilfe verschiedener Befehlszeilentools prüfen können, ob ein bestimmter Netzwerksocket in Linux geöffnet ist. Sie haben zunächst den Befehl ss mit den Optionen -tuln verwendet, um lauschende TCP- und UDP-Sockets anzuzeigen, und die Ausgabespalten wie Netid, State, Local Address:Port und Peer Address:Port verstanden.

Nachdem Sie ss verwendet haben, haben Sie normalerweise die Socket-Informationen mit dem Befehl netstat überprüft, der ähnliche Netzwerkstatistiken liefert. Schließlich haben Sie untersucht, wie Sie detaillierte Socket-Informationen direkt aus dem /proc/net-Dateisystem abrufen können, das einen tieferen Einblick in den Netzwerkstapel bietet. Diese Schritte bieten einen umfassenden Ansatz zur Identifizierung und Untersuchung geöffneter Netzwerksockets auf einem Linux-System.