Der ss
-Befehl ist ein moderner Ersatz für den klassischen netstat
. Sie können ihn unter Linux verwenden, um Statistiken über Ihre Netzwerkverbindungen zu erhalten. Hier erfahren Sie, wie Sie mit diesem praktischen Tool arbeiten.
Der ss-Befehl im Vergleich zu netstat
Als Ersatz für den veralteten netstat
-Befehl liefert ss
detaillierte Informationen darüber, wie Ihr Computer mit anderen Computern, Netzwerken und Diensten kommuniziert.
ss
zeigt Statistiken für Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (Interprocess) und Raw Sockets an. Raw Sockets arbeiten auf der Netzwerk-OSI-Ebene, was bedeutet, dass TCP- und UDP-Header von der Anwendungssoftware und nicht von der Transportschicht behandelt werden müssen. Internet Control Message Protocol (ICMP)-Nachrichten und das ping-Dienstprogramm verwenden beide Raw Sockets.
Verwendung von ss
Sie müssen ss
nicht installieren, da es bereits Teil einer aktuellen Linux-Distribution ist. Seine Ausgabe kann jedoch sehr lang sein – wir hatten Ergebnisse mit über 630 Zeilen. Die Ergebnisse sind auch sehr breit.
Deshalb haben wir Textdarstellungen der Ergebnisse beigefügt, da sie nicht in einen Screenshot passen würden. Wir haben sie gekürzt, um sie überschaubarer zu machen.
Auflistung von Netzwerkverbindungen
Bei Verwendung von ss
ohne Kommandozeilenoptionen werden Sockets aufgelistet, die nicht zuhören. Das heißt, es werden die Sockets aufgelistet, die sich nicht im Listening-Status befinden.
Um dies zu sehen, geben Sie Folgendes ein:
ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Processu_str ESTAB 0 0 * 41826 * 41827u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688u_str ESTAB 0 0 * 35550 * 35551...u_str ESTAB 0 0 * 38127 * 38128u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242u_str ESTAB 0 0 * 19039 * 19040u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306icmp6 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, einen „udp“ und „icmp6“, einen IP Version 6 ICMP-Socket. Weitere Beschreibungen der Linux-Socket-Typen finden Sie 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 entfernte Adresse und der Port (oder äquivalente Werte für Unix-Sockets).
Für UDP-Sockets ist die Spalte „State“ normalerweise leer. Für TCP-Sockets kann sie einen der folgenden Werte annehmen:
- LISTEN: Nur Server-seitig. Der Socket wartet auf eine Verbindungsanfrage.
- SYN-SENT: Nur Client-seitig. Dieser Socket hat eine Verbindungsanfrage gestellt und wartet darauf, dass sie angenommen wird.
- SYN-RECEIVED: Nur auf der Serverseite. Dieser Socket wartet auf eine Verbindungsbestätigung, nachdem er eine Verbindungsanforderung angenommen hat.
- ESTABLISHED: Server und Clients. Eine funktionierende Verbindung wurde zwischen dem Server und dem Client hergestellt, so dass Daten zwischen den beiden übertragen werden können.
- FIN-WAIT-1: Server und Clients. Dieser Socket wartet auf eine Verbindungsabbruchanforderung vom entfernten Socket oder auf eine Bestätigung einer Verbindungsabbruchanforderung, die zuvor von diesem Socket gesendet wurde.
- FIN-WAIT-2: Server und Clients. Dieser Socket wartet auf eine Verbindungsabbruchanforderung vom entfernten Socket.
- CLOSE-WAIT: Server und Client. Dieser Socket wartet auf eine Verbindungsabbruchanforderung vom lokalen Benutzer.
- CLOSING: Server und Clients. Dieser Socket wartet auf eine Bestätigung des Verbindungsabbruchs durch den entfernten Socket.
- LAST-ACK: Server und Client. Dieser Socket wartet auf eine Bestätigung der Verbindungsabbruchanforderung, die er an den entfernten Socket gesendet hat.
- TIME-WAIT: Server und Clients. Dieser Socket hat eine Bestätigung an den entfernten Socket gesendet, um ihm mitzuteilen, dass er die Abbruchanforderung des entfernten Sockets erhalten hat. Er wartet nun, um sicherzustellen, dass diese Bestätigung empfangen wurde.
- CLOSED: Es besteht keine Verbindung, also wurde der Socket beendet.
Listening Sockets
Um die lauschenden Sockets zu sehen, fügen wir die Option -l
(listening) hinzu, etwa so:
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 Sockets sind alle unverbunden und lauschend. Das „rtnl“ steht für routing netlink, das verwendet wird, um Informationen zwischen Kernel- und Userspace-Prozessen zu übertragen.
Alle Sockets 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 :ipp :* tcp LISTEN 0 100 :smtp :*
Die Ausgabe enthält alle Sockets, unabhängig vom Zustand.
Auflistung von TCP-Sockets
Sie können auch einen Filter anwenden, damit nur passende Sockets angezeigt werden. Wir verwenden die Option -t
(TCP), so dass nur TCP-Sockets aufgelistet werden:
ss -a -t
Auflistung von UDP-Sockets
Die Option -u
(UDP) führt die gleiche Art von Filterung durch. Dieses Mal werden nur UDP-Sockets angezeigt:
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 :*
Auflistung von Unix-Sockets
Um nur Unix-Sockets anzuzeigen, können Sie die Option -x
(Unix) einfügen, 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
Listing Raw Sockets
Der Filter für Raw Sockets ist die Option -w
(raw):
ss -a -w
Listing IP Version 4 Sockets
Sockets, die das TCP/IP Version 4 Protokoll verwenden, können mit der Option -4
(IPV4) aufgelistet werden:
ss -a -4
Listing IP Version 6 Sockets
Sie können den passenden IP Version 6 Filter mit der Option -6
(IPV6) einschalten, wie folgt:
ss -a -6
Sockets nach Status auflisten
Mit der Option state
können Sie Sockets nach ihrem Status auflisten. Dies funktioniert mit den Zuständen established, listening oder closed. Wir verwenden auch die Option resolve (-r
), die versucht, Netzwerkadressen in Namen und Ports in Protokolle aufzulösen.
Der folgende Befehl sucht nach etablierten TCP-Verbindungen, und ss
versucht, die Namen aufzulösen:
ss -t -r state established
Vier Verbindungen werden aufgelistet, die sich im etablierten Status befinden. Der Hostname, ubuntu20-04, wurde aufgelöst und für die SSH-Verbindung in der zweiten Zeile wird „ssh“ statt 22 angezeigt.
Wir können dies wiederholen, um nach Sockets im Listening-Status 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, die ein bestimmtes Protokoll verwenden, mit den Optionen dport
und sport
auflisten, die jeweils den Ziel- und Quellport darstellen.
Wir geben Folgendes ein, um Sockets aufzulisten, die das HTTPS-Protokoll auf einer established
-Verbindung verwenden (beachten Sie das Leerzeichen nach der öffnenden 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 Secure Shell (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.
Verbindungen zu einer bestimmten IP-Adresse auflisten
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
Prozesse identifizieren
Um zu sehen, welche Prozesse die Sockets verwenden, können Sie die Option Prozesse (-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 eingerichteten Verbindungen über TCP-Sockets vom SSH-Daemon und Firefox verwendet werden.
Ein würdiger Nachfolger
Der ss
-Befehl liefert die gleichen Informationen wie netstat
, aber in einer einfacheren und zugänglicheren Form. In der Manpage finden Sie weitere Optionen und Tipps.