Une fenêtre de terminal sur un système portable Linux.
Fatmawati Achmad Zaenuri/

La commande ss est un remplacement moderne de la classique netstat. Vous pouvez l’utiliser sous Linux pour obtenir des statistiques sur vos connexions réseau. Voici comment travailler avec cet outil pratique.

La commande ss versus netstat

Remplaçant la commande netstat dépréciée, ss vous donne des informations détaillées sur la façon dont votre ordinateur communique avec d’autres ordinateurs, réseaux et services.

ss affiche des statistiques pour le protocole de contrôle de transmission (TCP), le protocole de datagramme utilisateur (UDP), Unix (interprocessus) et les sockets brutes. Les sockets bruts fonctionnent au niveau OSI du réseau, ce qui signifie que les en-têtes TCP et UDP doivent être gérés par le logiciel d’application, et non par la couche transport. Les messages du protocole de message de contrôle Internet (ICMP) et l’utilitaire ping utilisent tous deux des sockets bruts.

Utilisation de ss

Vous n’avez pas besoin d’installer ss, car il fait déjà partie d’une distribution Linux à jour. Sa sortie, cependant, peut être très longue – nous avons eu des résultats contenant plus de 630 lignes. Les résultats sont également très larges.

Pour cette raison, nous avons inclus des représentations textuelles des résultats que nous avons obtenus, car ils ne tiendraient pas dans une capture d’écran. Nous les avons rognés pour les rendre plus gérables.

La liste des connexions réseau

L’utilisation de ss sans options de ligne de commande liste les sockets qui ne sont pas à l’écoute. C’est-à-dire qu’elle liste les sockets qui ne sont pas en état d’écoute.

Pour voir cela, tapez ce qui suit :

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

Les colonnes sont les suivantes :

  • Netid : Le type de socket. Dans notre exemple, nous avons « u_str », un flux Unix, un « udp », et « icmp6 », un socket IP version 6 ICMP. Vous pouvez trouver d’autres descriptions des types de socket Linux dans les pages de manuel Linux.
  • État : L’état dans lequel se trouve la socket.
  • Recv-Q : Le nombre de paquets reçus.
  • Send-Q : Le nombre de paquets envoyés.
  • Local Address:Port : L’adresse et le port locaux (ou les valeurs équivalentes pour les sockets Unix).
  • Peer Address:Port : L’adresse et le port distants (ou les valeurs équivalentes pour les sockets Unix).

Pour les sockets UDP, la colonne « State » est généralement vide. Pour les sockets TCP, elle peut être l’une des suivantes :

  • LISTEN : Côté serveur uniquement. La socket attend une demande de connexion.
  • SYN-SENT : Côté client uniquement. Cette socket a fait une demande de connexion et attend de voir si elle est acceptée.
  • SYN-RECEIVED : Côté serveur uniquement. Cette socket attend un accusé de réception de connexion après avoir accepté une demande de connexion.
  • ESTABLISHED : serveur et clients. Une connexion fonctionnelle a été établie entre le serveur et le client, permettant le transfert de données entre les deux.
  • FIN-WAIT-1 : Serveur et clients. Cette socket attend une demande de terminaison de connexion de la part de la socket distante, ou un accusé de réception d’une demande de terminaison de connexion qui a été envoyée précédemment depuis cette socket.
  • FIN-WAIT-2 : Serveur et clients. Cette socket est en attente d’une demande de terminaison de connexion de la part de la socket distante.
  • CLOSE-WAIT : Serveur et client. Cette socket attend une demande de terminaison de connexion de la part de l’utilisateur local.
  • CLOSING : Serveur et clients. Cette socket attend un accusé de réception de demande de fin de connexion de la part de la socket distante.
  • LAST-ACK : serveur et client. Cette socket attend un accusé de réception de la demande de terminaison de connexion qu’elle a envoyée à la socket distante.
  • TIME-WAIT : Serveur et clients. Cette socket a envoyé un accusé de réception à la socket distante pour lui faire savoir qu’elle a reçu la demande de terminaison de la socket distante. Elle attend maintenant de s’assurer que cet accusé de réception a été reçu.
  • CLOSED : Il n’y a pas de connexion, donc la socket a été terminée.

Lister les sockets d’écoute

Pour voir les sockets d’écoute, on ajoutera l’option -l (écoute), comme ceci:

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

Ces sockets sont toutes non connectées et en écoute. Le « rtnl » signifie routing netlink, qui est utilisé pour transférer des informations entre les processus du noyau et de l’espace utilisateur.

Lister toutes les sockets

Pour lister toutes les sockets, vous pouvez utiliser l’option -a (all):

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 :*

La sortie contient toutes les sockets, quel que soit leur état.

Lister les sockets TCP

Vous pouvez également appliquer un filtre pour que seules les sockets correspondantes soient affichées. Nous utiliserons l’option -t (TCP), ainsi seules les sockets TCP seront listées :

ss -a -t

Lister les sockets UDP

L’option -u (UDP) effectue le même type d’action de filtrage. Cette fois, nous ne verrons que les sockets UDP :

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 :*

Listing Unix Sockets

Pour ne voir que les sockets Unix, vous pouvez inclure l’option -x (Unix), comme indiqué ci-dessous :

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

Lister les sockets bruts

Le filtre pour les sockets bruts est l’option -w (raw) :

ss -a -w

Lister les sockets IP version 4

Les sockets utilisant le protocole TCP/IP version 4 peuvent être listés en utilisant l’option -4 (IPV4) :

ss -a -4

Lister les sockets IP version 6

Vous pouvez activer le filtre IP version 6 correspondant avec l’option -6 (IPV6), comme suit :

ss -a -6

Lister les sockets par état

Vous pouvez lister les sockets par l’état dans lequel ils se trouvent avec l’option state. Cela fonctionne avec les états établis, en écoute ou fermés. Nous utiliserons également l’option resolve (-r), qui essaie de résoudre les adresses réseau en noms, et les ports en protocoles.

La commande suivante recherchera les connexions TCP établies, et ss essaiera de résoudre les noms:

ss -t -r state established

Quatre connexions sont listées qui sont dans l’état établi. Le nom d’hôte, ubuntu20-04, a été résolu et « ssh » est affiché au lieu de 22 pour la connexion SSH sur la deuxième ligne.

Nous pouvons répéter ceci pour rechercher les sockets dans l’état d’écoute :

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 :*

Lister les sockets par protocole

Vous pouvez lister les sockets utilisant un protocole particulier avec les options dport et sport, qui représentent respectivement les ports de destination et de source.

Nous tapons ce qui suit pour lister les sockets utilisant le protocole HTTPS sur une connexion established (notez l’espace après la parenthèse d’ouverture et avant celle de fermeture):

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

Nous pouvons utiliser le nom du protocole ou le port habituellement associé à ce protocole. Le port par défaut de Secure Shell (SSH) est le port 22.

Nous utiliserons le nom du protocole dans une commande, puis nous le répéterons en utilisant le numéro de port :

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

Comme prévu, nous obtenons les mêmes résultats.

Lister les connexions à une adresse IP spécifique

Avec l’option dst (destination), nous pouvons lister les connexions à une adresse IP de destination particulière.

Nous tapons ce qui suit :

ss -a dst 192.168.4.25

Identifier les processus

Pour voir quels processus utilisent les sockets, vous pouvez utiliser l’option processus (-p), comme indiqué ci-dessous (notez que vous devez utiliser sudo) :

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))

Cela nous montre que les deux connexions établies sur les sockets TCP sont utilisées par le démon SSH et Firefox.

Un digne successeur

La commande ss fournit les mêmes informations que celles fournies précédemment par netstat, mais de manière plus simple et plus accessible. Vous pouvez consulter la page de manuel pour plus d’options et de conseils.

Articles

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.