SS command

La commande Socket Statistics (ss) est similaire à la commande netstat, en ce sens qu'elle permet d'afficher des informations de socket réseau utiles.

Depuis quelque temps, la page de manuel de netstat indique “Ce programme est obsolète. Le remplacement de netstat est ss.”. Cela va donc être une commande utile pour savoir comment aller de l'avant.

Heureusement, de nombreuses options sont similaires à celles utilisées par netstat, mais il y a quelques différences, comme nous le verrons.

La commande ss fait partie du package iproute de CentOS/Red Hat 7 Linux et est installée par défaut.

La syntaxe de la commande ss que nous allons utiliser ici est illustrée ci-dessous. En gros, nous pouvons spécifier des indicateurs et des filtres facultatifs, comme nous le verrons.

ss [options] [ FILTER ]

Par défaut, si nous exécutons la commande ss sans autres options spécifiées, la liste des sockets ouverts qui ont établi des connexions est affichée, par exemple, les sockets TCP, UDP ou UNIX.

[root@srv ~]# ss | head -n 5
Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port
u_str  ESTAB      0      0       * 17735                 * 17734
u_str  ESTAB      0      0       * 17734                 * 17735
u_str  ESTAB      0      0       * 17731                 * 17732
u_str  ESTAB      0      0      /run/systemd/journal/stdout 30822                 * 30821

Dans l'exemple ci-dessus, j'ai limité la sortie. Sur mon serveur, plus de 500 lignes ont été affichées en exécutant la commande ss. Vous pouvez donc en utiliser un peu moins pour pouvoir le lire facilement ou ajouter des options supplémentaires à la fin.

Plutôt que de lister tous les sockets, nous pouvons utiliser l'option -l pour lister spécifiquement les sockets qui écoutent actuellement une connexion.

[root@srv ~]# ss -lt
State      Recv-Q Send-Q                Local Address:Port                                 Peer Address:Port
LISTEN     0      128                               *:ssh                                             *:*
LISTEN     0      100                       127.0.0.1:smtp                                            *:*
LISTEN     0      128                              :::ssh                                            :::*
LISTEN     0      100                             ::1:smtp                                           :::*

Dans cet exemple, nous avons également utilisé l'option -t pour répertorier uniquement TCP.

Nous pouvons imprimer le processus ou le numéro PID qui possède un socket avec l'option -p.

[root@srv ~]# ss -pl | grep httpd
tcp    LISTEN     0      128    :::http                 :::*                     users:(("httpd",pid=12095,fd=4),("httpd",pid=12094,fd=4),("httpd",pid=12093,fd=4),("httpd",pid=12092,fd=4),("httpd",pid=12091,fd=4),("httpd",pid=12090,fd=4))

Par défaut, ss ne résoudra que les numéros de port, comme nous l'avons vu précédemment, par exemple dans la ligne ci-dessous que nous pouvons voir 192.168.1.14:ssh où ssh est répertorié comme port local.

[root@srv ~]# ss
Netid  State      Recv-Q Send-Q Local Address:Port    Peer Address:Port
tcp    ESTAB      0      64     192.168.1.14:ssh      192.168.1.191:57091

Cependant, si nous spécifions l'option -n, cette résolution n'aura pas lieu et nous verrons plutôt le numéro de port plutôt que le nom du service.

Netid  State      Recv-Q Send-Q Local Address:Port    Peer Address:Port
tcp    ESTAB      0      0      192.168.1.14:22       192.168.1.191:57091

Note:

22 est maintenant affiché plutôt que: ssh car nous avons désactivé toute la résolution de noms de noms d'hôtes et de ports

Nous pouvons également faire l'inverse et résoudre à la fois l'adresse IP et le numéro de port avec l'option -r. Avec cela, nous voyons maintenant le nom d'hôte du serveur 192.168.1.14 répertorié.

[root@srv ~]# ss -r
Netid  State      Recv-Q Send-Q Local Address:Port         Peer Address:Port
tcp    ESTAB      0      64     srv.oowy.lan:ssh    192.168.1.191:57091

Nous pouvons utiliser l'option -4 pour afficher uniquement les informations correspondant aux sockets IPv4. Dans l'exemple ci-dessous, nous utilisons également l'option -l pour répertorier tout ce qui est écouté sur une adresse IPv4.

[root@srv ~]# ss -l4
Netid  State      Recv-Q Send-Q                   Local Address:Port                          Peer Address:Port
udp    UNCONN     0      0                         *:45476                                    *:*
udp    UNCONN     0      0                         *:bootpc                                   *:*
udp    UNCONN     0      0                         127.0.0.1:323                              *:*
tcp    LISTEN     0      128                       *:ssh                                      *:*
tcp    LISTEN     0      100                       127.0.0.1:smtp                             *:*

De même, nous pouvons utiliser l'option -6 pour afficher uniquement les informations relatives aux sockets IPv6. Dans l'exemple ci-dessous, nous utilisons également l'option -l pour répertorier tout ce qui est écouté sur une adresse IPv6.

[root@srv ~]# ss -l6
Netid  State      Recv-Q Send-Q                   Local Address:Port                              Peer Address:Port
raw    UNCONN     0      0                        :::ipv6-icmp                                    :::*
udp    UNCONN     0      0                        :::18539                                        :::*
udp    UNCONN     0      0                        ::1:323                                         :::*
tcp    LISTEN     0      128                      :::http                                         :::*
tcp    LISTEN     0      128                      :::ssh                                          :::*
tcp    LISTEN     0      100                      ::1:smtp                                        :::*

L'option -t peut être utilisée pour afficher uniquement les sockets TCP. Lorsqu'il est combiné avec -l pour imprimer uniquement les sockets d'écoute, nous pouvons tout voir en écoutant sur TCP.

[root@srv ~]# ss -lt
State      Recv-Q Send-Q                   Local Address:Port                              Peer Address:Port
LISTEN     0      128                      *:ssh                                           *:*
LISTEN     0      100                      127.0.0.1:smtp                                  *:*
LISTEN     0      128                      :::http                                         :::*
LISTEN     0      128                      :::ssh                                          :::*
LISTEN     0      100                      ::1:smtp                                        :::*

L'option -u peut être utilisée pour afficher uniquement les sockets UDP. Comme UDP est un protocole sans connexion, la simple exécution avec l'option -u n'affichera aucune sortie. Nous pouvons combiner ceci avec l'option -a ou -l pour voir toutes les sockets UDP d'écoute, comme indiqué ci-dessous.

[root@srv ~]# ss -ul
State      Recv-Q Send-Q                   Local Address:Port                              Peer Address:Port
UNCONN     0      0                        *:45476                                         *:*
UNCONN     0      0                        *:bootpc                                        *:*
UNCONN     0      0                        127.0.0.1:323                                   *:*
UNCONN     0      0                        :::18539                                        :::*
UNCONN     0      0                        ::1:323                                         :::*

L'option -x peut être utilisée pour afficher uniquement les sockets de domaine unix.

[root@srv ~]# ss -x
Netid  State      Recv-Q Send-Q                   Local Address:Port                              Peer Address:Port
u_str  ESTAB      0      0                        * 17735                                         * 17734
u_str  ESTAB      0      0                        * 17734                                         * 17735
u_str  ESTAB      0      0                        * 17731                                         * 17732
u_str  ESTAB      0      0                    /run/systemd/journal/stdout 30822                   * 30821
u_str  ESTAB      0      0                        * 17732                                         * 17731
u_str  ESTAB      0      0                        * 17729                                         * 17728

L'option -m peut être utilisée pour afficher la quantité de mémoire utilisée par chaque socket.

[root@srv ~]# ss -ltm
State       Recv-Q Send-Q                              Local Address:Port                                  Peer Address:Port
LISTEN      0      50                                      127.0.0.1:56996                                            *:*
         skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN      0      50                                      127.0.0.1:55365                                            *:*
         skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN      0      50                                      127.0.0.1:52101                                            *:*
         skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN      0      50                                      127.0.0.1:36206                                            *:*
         skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)

Nous pouvons voir un aperçu rapide des statistiques avec l'option -s.

[root@srv ~]# ss -s
Total: 317 (kernel 1228)
TCP:   214 (estab 26, closed 162, orphaned 0, synrecv 0, timewait 161/0), ports 0
 
Transport Total     IP        IPv6
*         1228      -         -
RAW       1         1         0
UDP       2         2         0
TCP       52        45        7
INET      55        48        7
FRAG      0         0         0

Nous pouvons spécifier l'état d'une socket pour afficher uniquement les sockets dans cet état. Par exemple, nous pouvons spécifier les états, y compris établi, syn-envoyé, syn-recv, fin-wait-1, fin-wait-2, time-wait, fermé, fermé-wait, last-ack, écouter et fermer. L'exemple ci-dessous montre toutes les connexions TCP établies.

Pour générer cela, j'ai été connecté au serveur par SSH et j'ai juste chargé une page Web d'Apache. Nous pouvons alors voir que les connexions à Apache se transforment rapidement en time-wait.

[root@srv ~]# ss -t state established
Recv-Q Send-Q               Local Address:Port           Peer Address:Port
0      64                     192.168.1.14:ssh         192.168.1.191:57091
0      0              ::ffff:192.168.1.14:http   ::ffff:192.168.1.191:57373
0      0              ::ffff:192.168.1.14:http   ::ffff:192.168.1.191:57372
[root@srv ~]# ss -t state time-wait
Recv-Q Send-Q               Local Address:Port           Peer Address:Port
0      0              ::ffff:192.168.1.14:http   ::ffff:192.168.1.191:57373
0      0              ::ffff:192.168.1.14:http   ::ffff:192.168.1.191:57372

L'option -v peut être utilisée pour afficher des informations de version spécifiques pour la commande ss. Dans ce cas, nous voyons la version du paquet iproute qui fournit ss.

[root@srv ~]# ss -v
ss utility, iproute2-ss130716

L'option -h peut être utilisée pour afficher de l'’'aide supplémentaire concernant la commande ss, il est bon d'utiliser cette référence rapide si vous avez besoin d'une brève description de certaines des options les plus couramment utilisées. Notez que la sortie complète ici n'a pas été incluse pour des raisons de brièveté.

[root@srv ~]# ss -h
Usage: ss [ OPTIONS ]
Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus