Gestion du réseau

ss : Informations sur les connexions TCP, UDP et sockets réseau (remplace netstat)

Table des matières

Introduction



La commande ss (pour Socket Statistics) est utilisée sous Linux pour afficher des informations détaillées sur les sockets réseau ainsi que les connexions TCP et UDP.

ss est fourni par le paquet iproute, installé sur toutes les distributions Linux.
C'est la commande à utiliser en lieu et place de netstat (paquet net-tools) qui est maintenant déprécié.

Utilisation



La commande ss toute seule n'est pas très intéressante. On pourra affiner la sortie grâce à des options.

Pour voir les connexions TCP établies :

Code BASH :
ss -t


Code BASH :
State   Recv-Q   Send-Q       Local Address:Port         Peer Address:Port    Process
ESTAB   0        0           192.168.221.51:ssh        192.168.21.222:32776


Le tableau indique :
State : L'état actuel de la connexion, indiquant si la connexion est établie, en attente, fermée, etc.
Recv-Q : La taille de la file d'attente de réception pour la connexion, c'est-à-dire le nombre de paquets non lus en attente de traitement.
Send-Q : La taille de la file d'attente d'envoi pour la connexion, c'est-à-dire le nombre de paquets en attente d'envoi.
Local Address:Port : L'adresse IP et le numéro de port local associés à la connexion.
Peer Address:Port : L'adresse IP et le numéro de port de la machine distante avec laquelle la connexion est établie.
Process : Le nom du processus ou du service associé à la connexion, si disponible.

Pour lister les connexions UDP établies :

Code BASH :
ss -u


On peut combiner les options, pour lister les connexions TCP ET UDP établies :

Code BASH :
ss -ut


Code :
Netid  State  Recv-Q  Send-Q      Local Address:Port       Peer Address:Port   Process
tcp    ESTAB  0       0          192.168.221.51:ssh      192.168.21.222:32776


Une nouvelle colonne fait son apparition Netid, qui indique si le protocole est TCP ou UDP. Dans mon exemple, je n'ai pas de connexion établie en UDP.

On remarque que peu d'informations sont affichées, bien que plusieurs services tournent sur la machine. Il y a en effet peu de connexions établies.

Pour lister les connexions TCP et UDP établies ET en écoute, on utilisera l'option -a :

Code BASH :
ss -uta


Code :
Netid  State   Recv-Q  Send-Q    Local Address:Port        Peer Address:Port   Process
udp    UNCONN  0       0               0.0.0.0:domain           0.0.0.0:*
udp    UNCONN  0       0               0.0.0.0:bootps           0.0.0.0:*
udp    UNCONN  0       0                  [::]:domain              [::]:*
tcp    LISTEN  0       128             0.0.0.0:ssh              0.0.0.0:*
tcp    LISTEN  0       32              0.0.0.0:domain           0.0.0.0:*
tcp    ESTAB   0       0        192.168.221.51:ssh       192.168.21.222:32776
tcp    LISTEN  0       80                    *:mysql                  *:*
tcp    LISTEN  0       511                   *:http                   *:*
tcp    LISTEN  0       128                [::]:ssh                 [::]:*
tcp    LISTEN  0       32                 [::]:domain              [::]:*
tcp    LISTEN  0       511                   *:https                  *:*


On peut ne lister que ce qui est en écoute (sans les connexions établies) avec l'option -l :
Code BASH :
ss -utl


ss nous remplace le numéro du port par le service concerné lorsqu'il est commun.

On peut demander à ss de ne pas traduire le numéro de port en service grâce à l'option -n :

Code BASH :
ss -utan


Code :
Netid  State   Recv-Q  Send-Q     Local Address:Port       Peer Address:Port   Process
udp    UNCONN  0       0                0.0.0.0:53              0.0.0.0:*
udp    UNCONN  0       0                0.0.0.0:67              0.0.0.0:*
udp    UNCONN  0       0                   [::]:53                 [::]:*
tcp    LISTEN  0       128              0.0.0.0:22              0.0.0.0:*
tcp    LISTEN  0       32               0.0.0.0:53              0.0.0.0:*
tcp    ESTAB   0       0         192.168.221.51:22       192.168.21.222:32776
tcp    LISTEN  0       80                     *:3306                  *:*
tcp    LISTEN  0       511                    *:80                    *:*
tcp    LISTEN  0       128                 [::]:22                 [::]:*
tcp    LISTEN  0       32                  [::]:53                 [::]:*
tcp    LISTEN  0       511                    *:443                   *:*


Enfin, une option qui peut être utile c'est -p qui nous affiche des infos détaillées sur le processus utilisant ce port :

Code BASH :
ss -utanp


Code :
Netid       State        Recv-Q       Send-Q              Local Address:Port                 Peer Address:Port        Process
udp         UNCONN       0            0                         0.0.0.0:53                        0.0.0.0:*            users:(("dnsmasq",pid=23179,fd=6))
udp         UNCONN       0            0                         0.0.0.0:67                        0.0.0.0:*            users:(("dnsmasq",pid=23179,fd=4))
udp         UNCONN       0            0                            [::]:53                           [::]:*            users:(("dnsmasq",pid=23179,fd=8))
tcp         LISTEN       0            128                       0.0.0.0:22                        0.0.0.0:*            users:(("sshd",pid=732,fd=3))
tcp         LISTEN       0            32                        0.0.0.0:53                        0.0.0.0:*            users:(("dnsmasq",pid=23179,fd=7))
tcp         ESTAB        0            0                  192.168.221.51:22                 192.168.21.222:32776        users:(("sshd",pid=22621,fd=4),("sshd",pid=22612,fd=4))
tcp         LISTEN       0            80                              *:3306                            *:*            users:(("mysqld",pid=1026,fd=21))
tcp         LISTEN       0            511                             *:80                              *:*            users:(("httpd",pid=776,fd=4),("httpd",pid=775,fd=4),("httpd",pid=774,fd=4),("httpd",pid=729,fd=4))
tcp         LISTEN       0            128                          [::]:22                           [::]:*            users:(("sshd",pid=732,fd=4))
tcp         LISTEN       0            32                           [::]:53                           [::]:*            users:(("dnsmasq",pid=23179,fd=9))
tcp         LISTEN       0            511                             *:443                             *:*            users:(("httpd",pid=776,fd=6),("httpd",pid=775,fd=6),("httpd",pid=774,fd=6),("httpd",pid=729,fd=6))


Il est enfin possible de filtrer que les sockets en IPv4 ou IPv6 via les options respectives -4 et -6. Par défaut les 2 sont affichés.

En résumé



Les options intéressantes à ss, en tout cas celles que j'utilise :

Pour résumer :

-l (listen) affiche les sockets en écoute uniquement (listening).
-a (all) affiche toutes les connexions en écoute et établies.
-t (tcp) affiche les connexions TCP.
-u (udp) affiche les connexions UDP.
-n (numeric) affiche les adresses IP et les numéros de port au format numérique.
-p (process) affiche les processus liés aux connexions

J'utilise bien souvent donc la commande suivante

Code BASH :
ss -natu
Cette page a été vue 10756 fois