So verwenden Sie den ss-Befehl unter Linux

Der Befehl ss ist ein moderner Ersatz für den klassischen netstat. Sie können es unter Linux verwenden, um Statistiken über Ihre Netzwerkverbindungen zu erhalten. So arbeiten Sie mit diesem praktischen Tool.

Der ss-Befehl versus netstat

Ein Ersatz für das veraltete netstat-Befehlss gibt dir detaillierte Informationen darüber, wie Ihr Computer mit anderen Computern, Netzwerken und Diensten kommuniziert.

ss zeigt Statistiken für . an Transmission Control Protocol (TCP), Benutzer-Datagramm-Protokoll (UDP), Unix (Interprozess)und Raw-Sockets. Rohfassungen arbeiten bei der Netzwerk-OSI-Ebenewas bedeutet, dass TCP- und UDP-Header von der Anwendungssoftware verarbeitet werden müssen, nicht von der Transportschicht. Internet Control Message Protocol (ICMP)-Nachrichten und die Klingeln Dienstprogramm verwenden beide Raw-Sockets.

Verwenden von ss

Sie müssen ss nicht installieren, da es bereits Teil einer aktuellen Linux-Distribution ist. Die Ausgabe kann jedoch sehr lang sein – wir haben Ergebnisse mit über 630 Zeilen erhalten. Die Ergebnisse sind auch sehr breit gefächert.

Aus diesem Grund haben wir Textdarstellungen der erhaltenen Ergebnisse eingefügt, da sie nicht in einen Screenshot passen würden. Wir haben sie getrimmt, um sie handlicher zu machen.

Netzwerkverbindungen auflisten

Die Verwendung von ss ohne Befehlszeilenoptionen listet Sockets auf, die nicht lauschen. Das heißt, es listet die Sockets auf, die sich nicht im Listening-Zustand befinden.

Geben Sie Folgendes ein, um dies anzuzeigen:

ss

Netid State Recv-Q Send-Q          Local Address:Port Peer Address:Port   Process
u_str ESTAB 0      0                           * 41826           * 41827
u_str ESTAB 0      0 /run/systemd/journal/stdout 35689           * 35688
u_str ESTAB 0      0                           * 35550           * 35551
...
u_str ESTAB 0      0                           * 38127           * 38128
u_str ESTAB 0      0 /run/dbus/system_bus_socket 21243           * 21242
u_str ESTAB 0      0                           * 19039           * 19040
u_str ESTAB 0      0 /run/systemd/journal/stdout 18887           * 18885 
u_str ESTAB 0      0 /run/dbus/system_bus_socket 19273           * 17306
icmp6 UNCONN 0     0                           *:ipv6-icmp       *:*
udp   ESTAB 0      0         192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps

Die Spalten sind wie folgt:

Netid: Der Typ des Sockets. In unserem Beispiel haben wir „u_str“, einen Unix-Stream, ein „udp“ und „icmp6“, einen ICMP-Socket der IP-Version 6. Weitere Beschreibungen von . finden Sie Linux-Socket-Typen in den Linux-Manpages.
State: Der Zustand, in dem sich der Socket befindet.
Recv-Q: Die Anzahl der empfangenen Pakete.
Send-Q: Die Anzahl der gesendeten Pakete.
Lokale Adresse:Port: Die lokale Adresse und der Port (oder äquivalente Werte für Unix-Sockets).
Peer-Adresse:Port: Die Remote-Adresse und der Port (oder äquivalente Werte für Unix-Sockets).

  So ändern Sie Ihre Standard-Shell unter Linux mit chsh

Bei UDP-Sockets ist die Spalte „State“ normalerweise leer. Für TCP-Sockets kann dies einer der folgenden sein:

HÖREN: Nur serverseitig. Der Socket wartet auf eine Verbindungsanfrage.
SYN-SENT: Nur clientseitig. Dieser Socket hat eine Verbindungsanfrage gestellt und wartet darauf, ob er akzeptiert wird.
SYN-EMPFANGEN: Nur serverseitig. Dieser Socket wartet auf eine Verbindungsbestätigung, nachdem er eine Verbindungsanfrage akzeptiert hat.
Etabliert: Server und Clients. Zwischen dem Server und dem Client wurde eine funktionierende Verbindung hergestellt, sodass Daten zwischen beiden übertragen werden können.
FIN-WAIT-1: Server und Clients. Dieser Socket erwartet eine Verbindungsbeendigungsanforderung vom Remote-Socket oder eine Bestätigung einer Verbindungsbeendigungsanforderung, die zuvor von diesem Socket gesendet wurde.
FIN-WAIT-2: Server und Clients. Dieser Socket wartet auf eine Verbindungsbeendigungsanforderung vom Remote-Socket.
CLOSE-WAIT: Server und Client. Dieser Socket wartet auf eine Anforderung zum Beenden der Verbindung vom lokalen Benutzer.
SCHLIESSEN: Server und Clients. Dieser Socket wartet auf eine Bestätigung der Verbindungsbeendigungsanforderung vom Remote-Socket.
LAST-ACK: Server und Client. Dieser Socket wartet auf eine Bestätigung der Verbindungsbeendigungsanforderung, die er an den Remote-Socket gesendet hat.
TIME-WAIT: Server und Clients. Dieser Socket hat eine Bestätigung an den Remote-Socket gesendet, um ihm mitzuteilen, dass er die Beendigungsanforderung des Remote-Sockets erhalten hat. Es wartet nun darauf, sicherzustellen, dass die Bestätigung eingegangen ist.
GESCHLOSSEN: Es besteht keine Verbindung, der Socket wurde also beendet.

Listening-Sockets auflisten

Um die Listening-Sockets anzuzeigen, fügen wir die Option -l (listening) hinzu, wie folgt:

ss -l

Netid State  Recv-Q Send-Q               Local Address:Port                  Peer Address:Port Process 
nl    UNCONN 0      0                             rtnl:NetworkManager/535                * 
nl    UNCONN 0      0                             rtnl:evolution-addre/2987              * 
...
u_str LISTEN 0      4096          /run/systemd/private 13349                            * 0 
u_seq LISTEN 0      4096             /run/udev/control 13376                            * 0 
u_str LISTEN 0      4096             /tmp/.X11-unix/X0 33071                            * 0 
u_dgr UNCONN 0      0      /run/systemd/journal/syslog 13360                            * 0 
u_str LISTEN 0      4096    /run/systemd/fsck.progress 13362                            * 0 
u_dgr UNCONN 0      0    /run/user/1000/systemd/notify 32303                            * 0

Diese Buchsen sind alle nicht verbunden und hören zu. Das „rtnl“ bedeutet Routing-Netlink, der verwendet wird, um Informationen zwischen Kernel- und Userspace-Prozessen zu übertragen.

Alle Steckdosen auflisten

Um alle Sockets aufzulisten, können Sie die Option -a (all) verwenden:

ss -a

Netid State  Recv-Q Send-Q    Local Address:Port                 Peer Address:Port    Process 
nl    UNCONN 0      0                  rtnl:NetworkManager/535               * 
nl    UNCONN 0      0                  rtnl:evolution-addre/2987 * 
...
u_str LISTEN 0      100       public/showq 23222                            * 0 
u_str LISTEN 0      100      private/error 23225                            * 0 
u_str LISTEN 0      100      private/retry 23228                            * 0 
...
udp   UNCONN 0      0             0.0.0.0:631                         0.0.0.0:* 
udp   UNCONN 0      0             0.0.0.0:mdns                        0.0.0.0:* 
...
tcp   LISTEN 0      128              [::]:ssh                            [::]:* 
tcp   LISTEN 0      5               [::1]:ipp                            [::]:* 
tcp   LISTEN 0      100             [::1]:smtp                           [::]:*

Die Ausgabe enthält alle Sockets, unabhängig vom Status.

  So installieren Sie den Signal Privacy Messenger unter Linux

TCP-Sockets auflisten

Sie können auch einen Filter anwenden, damit nur passende Sockets angezeigt werden. Wir verwenden die Option -t (TCP), sodass nur TCP-Sockets aufgelistet werden:

ss -a -t

Auflisten von UDP-Sockets

Die Option -u (UDP) führt dieselbe Art von Filteraktion aus. Dieses Mal sehen wir nur UDP-Sockets:

ss -a -u

State  Recv-Q Send-Q    Local Address:Port Peer   Address:Port Process 
UNCONN 0      0               0.0.0.0:631         0.0.0.0:* 
UNCONN 0      0               0.0.0.0:mdns        0.0.0.0:* 
UNCONN 0      0               0.0.0.0:60734       0.0.0.0:* 
UNCONN 0      0         127.0.0.53%lo:domain      0.0.0.0:* 
ESTAB 0       0    192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps 
UNCONN 0      0                   [::]:mdns          [::]:* 
UNCONN 0      0                   [::]:51193         [::]:*

Unix-Sockets auflisten

Um nur Unix-Sockets anzuzeigen, können Sie die Option -x (Unix) einschließen, wie unten gezeigt:

ss -a -x

Netid State Recv-Q Send-Q               Local Address:Port  Peer Address:Port    Process 
u_str ESTAB 0      0                                * 41826            * 41827 
u_str ESTAB 0      0                                * 23183            * 23184 
u_str ESTAB 28     0               @/tmp/.X11-unix/X0 52640            * 52639 
...
u_str ESTAB 0      0      /run/systemd/journal/stdout 18887            * 18885 
u_str ESTAB 0      0      /run/dbus/system_bus_socket 19273            * 17306

Auflisten von Raw Sockets

Der Filter für Raw-Sockets ist die Option -w (raw):

ss -a -w

Auflistung der IP-Version 4 Sockets

Sockets, die das Protokoll TCP/IP Version 4 verwenden, können mit der Option -4 (IPV4) aufgelistet werden:

ss -a -4

Auflistung von IP-Version 6-Sockets

Sie können den passenden Filter der IP-Version 6 mit der Option -6 (IPV6) wie folgt aktivieren:

ss -a -6

Sockets nach Bundesstaat auflisten

Mit der Option state können Sie Sockets nach dem Status auflisten, in dem sie sich befinden. Dies funktioniert mit etablierten, hörenden oder geschlossenen Zuständen. Wir verwenden auch die Auflösungsoption (-r), die versucht, Netzwerkadressen in Namen und Ports in Protokolle aufzulösen.

Der folgende Befehl sucht nach bestehenden TCP-Verbindungen und ss versucht, die Namen aufzulösen:

ss -t -r state established

Es werden vier Verbindungen aufgelistet, die sich im hergestellten Zustand befinden. Der Hostname, ubuntu20-04, wurde aufgelöst und „ssh“ wird statt 22 für die SSH-Verbindung in der zweiten Zeile angezeigt.

  So spielen Sie Subnautica unter Linux

Wir können dies wiederholen, um nach Sockets im Listening-Zustand zu suchen:

ss -t -r state listening

Recv-Q Send-Q Local Address:Port   Peer Address:Port Process 
0      128        localhost:5939        0.0.0.0:* 
0      4096    localhost%lo:domain      0.0.0.0:* 
0      128          0.0.0.0:ssh         0.0.0.0:* 
0      5          localhost:ipp         0.0.0.0:* 
0      100        localhost:smtp        0.0.0.0:* 
0      128             [::]:ssh         [::]:* 
0      5      ip6-localhost:ipp         [::]:* 
0      100    ip6-localhost:smtp        [::]:*

Sockets nach Protokoll auflisten

Sie können die Sockets mit einem bestimmten Protokoll mit den Optionen dport und sport auflisten, die die Ziel- bzw. Quellports darstellen.

Wir geben Folgendes ein, um Sockets aufzulisten, die das HTTPS-Protokoll für eine hergestellte Verbindung verwenden (beachten Sie das Leerzeichen nach der öffnenden Klammer und vor der schließenden Klammer):

ss -a state established ‘( dport = :https or sport = :https )’

Wir können den Protokollnamen oder den Port verwenden, der normalerweise mit diesem Protokoll verbunden ist. Der Standardport für Sichere Hülle (SSH) ist Port 22.

Wir verwenden den Protokollnamen in einem Befehl und wiederholen ihn dann mit der Portnummer:

ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’

Wie erwartet erhalten wir die gleichen Ergebnisse.

Auflisten von Verbindungen zu einer bestimmten IP-Adresse

Mit der Option dst (Ziel) können wir Verbindungen zu einer bestimmten Ziel-IP-Adresse auflisten.

Wir geben folgendes ein:

ss -a dst 192.168.4.25

Identifizieren von Prozessen

Um zu sehen, welche Prozesse die Sockets verwenden, können Sie die Prozessoption (-p) verwenden, wie unten gezeigt (beachten Sie, dass Sie sudo verwenden müssen):

sudo ss -t -p

State Recv-Q Send-Q  Local Address:Port   Peer Address:Port  Process 
ESTAB 0      0       192.168.4.28:57650  54.218.19.119:https users:(("firefox",pid=3378,fd=151)) 
ESTAB 0      0       192.168.4.28:ssh     192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))

Dies zeigt uns, dass die beiden hergestellten Verbindungen auf TCP-Sockets vom SSH-Daemon und Firefox verwendet werden.

Ein würdiger Nachfolger

Der Befehl ss stellt dieselben Informationen bereit, die zuvor von netstat bereitgestellt wurden, jedoch auf einfachere und zugänglichere Weise. Sie können die man-Seite für weitere Optionen und Tipps.