ss : Informations sur les connexions TCP, UDP et sockets réseau (remplace netstat)
Table des matières
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é.
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 :
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 :
On peut combiner les options, pour lister les connexions TCP ET UDP établies :
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 :
On peut ne lister que ce qui est en écoute (sans les connexions établies) avec l'option -l :
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 :
Enfin, une option qui peut être utile c'est -p qui nous affiche des infos détaillées sur le processus utilisant ce port :
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.
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
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