GNU/Linux >> Tutoriels Linux >  >> Linux

10 exemples de commande Linux ss pour surveiller les connexions réseau

ss - statistiques de socket

Dans un tutoriel précédent, nous avons vu comment utiliser la commande netstat pour obtenir des détails sur les connexions réseau/socket. Cependant, la commande netstat a longtemps été obsolète et remplacée par la commande ss de la suite d'outils iproute.

La commande ss est capable d'afficher des détails sur les connexions réseau avec plus d'informations que la commande netstat et elle est plus rapide. La commande netstat lit divers fichiers /proc pour collecter des informations. Cependant, cette approche est plus lente lorsqu'il y a beaucoup de connexions à afficher.

La commande ss obtient ses informations directement à partir de l'espace du noyau. Les options utilisées avec les commandes ss sont très similaires à netstat, ce qui en fait un remplacement facile.

Donc, dans ce tutoriel, nous allons voir quelques exemples d'utilisation de la commande ss pour vérifier les connexions réseau et les statistiques de socket.

1. Lister toutes les connexions

La commande la plus simple consiste à lister toutes les connexions.

$ ss | less
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port
u_str  ESTAB      0      0                    * 15545                 * 15544
u_str  ESTAB      0      0                    * 12240                 * 12241
u_str  ESTAB      0      0      @/tmp/dbus-2hQdRvvg49 12726                 * 12159
u_str  ESTAB      0      0                    * 11808                 * 11256
u_str  ESTAB      0      0                    * 15204                 * 15205
.....

Nous dirigeons la sortie vers moins afin que la sortie soit défilable. La sortie contiendra tous les détails de connexion tcp, udp et unix socket.

2. Filtrez les connexions tcp, udp ou unix

Pour afficher uniquement les connexions tcp ou udp ou unix, utilisez l'option t, u ou x.

$ ss -t
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
ESTAB      0      0           192.168.1.2:43839     108.160.162.37:http
ESTAB      0      0           192.168.1.2:43622     199.59.149.201:https
ESTAB      0      0           192.168.1.2:33141      83.170.73.249:ircd
ESTAB      0      0           192.168.1.2:54028     74.125.135.125:xmpp-client
$ ss -t
OR
$ ss -A tcp

Par défaut, l'option "t" seule va signaler uniquement les connexions qui sont "établies" ou CONNECTÉES". Elle ne signale pas les sockets tcp qui sont "À L'ÉCOUTE". Utilisez l'option '-a' avec t, pour signaler tous à la fois.

Lister toutes les connexions udp

$ ss -ua
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
UNCONN     0      0           192.168.1.2:48268                  *:*
UNCONN     0      0           192.168.1.2:56575                  *:*
UNCONN     0      0                     *:40309                  *:*
UNCONN     0      0           192.168.1.2:56879                  *:*
UNCONN     0      0                     *:49014                  *:*
UNCONN     0      0           192.168.1.2:53124                  *:*
UNCONN     0      0             127.0.1.1:domain                 *:*
$ ss -a -A udp
The a option tells ss to report both "CONNECTED" and "LISTENING" sockets. Since UDP is a connection-less protocol, just "ss -u" will not report anything in most cases. Therefore we use the "a" option report all UDP connections (connected and listening).

De même, utilisez l'option x pour répertorier toutes les connexions socket unix.

3. Ne pas résoudre le nom d'hôte

Pour obtenir la sortie plus rapidement, utilisez l'option "n" pour empêcher ss de résoudre les adresses IP en noms d'hôte. Mais cela empêchera également la résolution des numéros de port.

$ ss -nt
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80
ESTAB      0      0             192.168.1.2:51350      74.125.200.84:443
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667
ESTAB      0      0             192.168.1.2:54028     74.125.135.125:5222
ESTAB      0      0             192.168.1.2:48156      66.196.120.44:5050

4. Afficher uniquement les prises d'écoute

Cela listera toutes les prises d'écoute. Par exemple, le serveur Web apache ouvre une connexion socket sur le port 80 pour écouter les connexions entrantes.

$ ss -ltn
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      5                 127.0.1.1:53                       *:*
LISTEN     0      128               127.0.0.1:631                      *:*
LISTEN     0      128                     ::1:631                     :::*

La commande ci-dessus répertorie toutes les connexions "tcp" "d'écoute". L'option n désactive la résolution du nom d'hôte des adresses IP, ce qui accélère la sortie.

Pour lister toutes les connexions udp en écoute, remplacez t par u

$ ss -lun
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
UNCONN     0      0                 127.0.1.1:53                       *:*
UNCONN     0      0                         *:68                       *:*
UNCONN     0      0               192.168.1.2:123                      *:*
UNCONN     0      0                 127.0.0.1:123                      *:*
UNCONN     0      0                         *:123                      *:*
UNCONN     0      0                         *:5353                     *:*
UNCONN     0      0                         *:47799                    *:*
UNCONN     0      0                         *:25322                    *:*
UNCONN     0      0                        :::54310                   :::*
.....

5. Afficher le nom et le pid du processus

Pour imprimer le nom/pid du processus propriétaire de la connexion, utilisez l'option p

$ ss -ltp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*
LISTEN     0      128           127.0.0.1:9050                   *:*
LISTEN     0      128                   *:90                     *:*
LISTEN     0      128                   *:db-lsp                 *:*        users:(("dropbox",3566,32))
LISTEN     0      5             127.0.0.1:6600                   *:*
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0))

Dans la sortie ci-dessus, la dernière colonne contient le nom du processus et le pid. Dans cet exemple, dnsmasq est le nom du processus et 1299 est le pid.

$ sudo ss -ltp
[sudo] password for enlightened:
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*        users:(("master",2051,12))
LISTEN     0      128                   *:90                     *:*        users:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx",1697,6),("nginx",1696,6))
LISTEN     0      5             127.0.0.1:6600                   *:*        users:(("mpd",2392,5))
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7))
LISTEN     0      16                    *:2633                   *:*        users:(("oned",1853,16))
LISTEN     0      50            127.0.0.1:mysql                  *:*        users:(("mysqld",1095,10))
LISTEN     0      5             127.0.1.1:domain                 *:*        users:(("dnsmasq",1347,5))
LISTEN     0      32                    *:ftp                    *:*        users:(("vsftpd",1051,3))
LISTEN     0      128                   *:ssh                    *:*        users:(("sshd",1015,3))
LISTEN     0      128           127.0.0.1:ipp                    *:*        users:(("cupsd",688,11))
LISTEN     0      128                  :::http                  :::*        users:(("apache2",5322,4),("apache2",5321,4),("apache2",5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4))
LISTEN     0      128                  :::ssh                   :::*        users:(("sshd",1015,4))
LISTEN     0      128                 ::1:ipp                   :::*        users:(("cupsd",688,10))

6. Imprimer les statistiques récapitulatives

L'option s imprime les statistiques.

$ ss -s
Total: 526 (kernel 0)
TCP:   10 (estab 7, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total     IP        IPv6
*	  0         -         -
RAW	  0         0         0
UDP	  15        9         6
TCP	  10        9         1
INET	  25        18        7
FRAG	  0         0         0

7. Afficher les informations de la minuterie

Avec l'option '-o', les informations de temps de chaque connexion seraient affichées. Les informations de la minuterie indiquent combien de temps avec

$ ss -tn -o
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80
ESTAB      0      0             192.168.1.2:36335     204.144.140.26:80     timer:(keepalive,26sec,0)
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667
ESTAB      0      0             192.168.1.2:58857      74.121.141.84:80     timer:(keepalive,23sec,0)
ESTAB      0      0             192.168.1.2:42794     173.194.40.239:80     timer:(keepalive,32sec,0)

8. Afficher uniquement les connexions socket IPv4 ou IPv6

Pour afficher uniquement les connexions socket IPv4, utilisez l'option '-f inet' ou '-4'.

$ ss -tl -f inet
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*
LISTEN     0      128           127.0.0.1:9050                   *:*
LISTEN     0      128                   *:90                     *:*
LISTEN     0      128                   *:db-lsp                 *:*
LISTEN     0      5             127.0.0.1:6600                   *:*

Pour afficher uniquement les connexions IPv6, utilisez l'option '-f inet6' ou '-6'.

$ ss -tl6
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100                 ::1:smtp                  :::*
LISTEN     0      128                  :::12865                 :::*
LISTEN     0      128                  :::http                  :::*
LISTEN     0      128                  :::ssh                   :::*
LISTEN     0      128                 ::1:ipp                   :::*

9. Filtrage des connexions par état tcp

La commande ss prend en charge les filtres qui peuvent être utilisés pour afficher uniquement des connexions spécifiques. L'expression de filtre doit être suffixée après toutes les options. La commande ss accepte le filtre au format suivant.

$ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]

Voici maintenant quelques exemples sur la façon de filtrer les connexions de socket par états de socket.
Pour afficher toutes les sockets tcp Ipv4 qui sont dans l'état "connecté".

$ ss -t4 state established
Recv-Q Send-Q         Local Address:Port             Peer Address:Port
0      0                192.168.1.2:54436          165.193.246.23:https
0      0                192.168.1.2:43386          173.194.72.125:xmpp-client
0      0                192.168.1.2:38355           199.59.150.46:https
0      0                192.168.1.2:56198          108.160.162.37:http

Affichage des sockets avec attente d'état

$ ss -t4 state time-wait
Recv-Q Send-Q         Local Address:Port             Peer Address:Port
0      0                192.168.1.2:42261           199.59.150.39:https
0      0                  127.0.0.1:43541               127.0.0.1:2633

L'état peut être l'un des suivants

1. established
2. syn-sent
3. syn-recv
4. fin-wait-1
5. fin-wait-2
6. time-wait
7. closed
8. close-wait
9. last-ack
10. closing
11. all - All of the above states
12. connected - All the states except for listen and closed
13. synchronized - All the connected states except for syn-sent
14. bucket - Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
15. big - Opposite to bucket state.

Notez que de nombreux états comme syn-sent, syn-recv n'afficheront aucune socket la plupart du temps, car les sockets restent dans de tels états pendant très peu de temps. L'idéal serait d'utiliser la commande watch pour détecter ces états de socket en temps réel.

Voici un exemple

$ watch -n 1 "ss -t4 state syn-sent"

Après avoir exécuté la commande ci-dessus, essayez d'ouvrir un site Web dans un navigateur ou téléchargez quelque chose à partir d'une URL. Immédiatement, vous devriez voir des connexions de socket apparaître dans la sortie, mais pendant très peu de temps.

Every 1.0s: ss -t4 state syn-sent                   Tue Apr  1 10:07:33 2014
Recv-Q Send-Q           Local Address:Port               Peer Address:Port
0      1                  192.168.1.2:55089            202.79.210.121:https
0      1                  192.168.1.2:33733             203.84.220.80:https
0      1                  192.168.1.2:36240             106.10.198.33:https

10. Filtrer les connexions par adresse et numéro de port

Outre les états de socket tcp, la commande ss prend également en charge le filtrage basé sur l'adresse et le numéro de port du socket. Les exemples suivants le démontrent.

Affiche toutes les connexions socket avec le port source ou destination de ssh.

$ ss -at '( dport = :ssh or sport = :ssh )'
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      128                   *:ssh                    *:*
LISTEN     0      128                  :::ssh                   :::*

Sockets avec port de destination 443 ou 80

$ ss -nt '( dst :443 or dst :80 )'
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:58844      199.59.148.82:443
ESTAB      0      0             192.168.1.2:55320     165.193.246.23:443
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80
ESTAB      0      0             192.168.1.2:54889    192.241.177.148:443
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80
ESTAB      0      0             192.168.1.2:33440      38.127.167.38:443

La syntaxe suivante fonctionnerait également

$ ss -nt dst :443 or dst :80

Plus d'exemples

# Filter by address
$ ss -nt dst 74.125.236.178
# CIDR notation is also supported
$ ss -nt dst 74.125.236.178/16
# Address and Port combined
$ ss -nt dst 74.125.236.178:80

Les ports peuvent également être filtrés avec les options dport/sport. Les numéros de port doivent être précédés d'un ":".

$ ss -nt dport = :80
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80
ESTAB      0      0             192.168.1.2:55043     74.125.236.178:80

Ce qui précède est identique à> ss -nt dst :80

Quelques exemples supplémentaires de filtrage

# source address is 127.0.0.1 and source port is greater than 5000
$ ss -nt src 127.0.0.1 sport gt :5000
# local smtp (port 25) sockets
$ sudo ss -ntlp sport eq :smtp
# port numbers greater than 25
$ sudo ss -nt sport gt :1024
# sockets with remote ports less than 100
$ sudo ss -nt dport \< :100
# connections to remote port 80
$ sudo ss -nt state connected dport = :80

Les opérateurs suivants sont pris en charge lors de la comparaison des numéros de port

<= or le : Less than or equal to port
>= or ge : Greater than or equal to port
== or eq : Equal to port
!= or ne : Not equal to port
< or gt : Less than to port
> or lt : Greater than to port

Résumé

Les exemples ci-dessus couvrent la plupart de ce que la commande ss prend en charge. Pour plus d'informations, consultez les pages de manuel.

La documentation de la syntaxe du filtre peut être trouvée dans le paquet iproute2-doc qui peut être installé sur les systèmes debian/ubuntu

$ sudo apt-get install iproute2-doc

Le fichier /usr/share/doc/iproute2-doc/ss.html contient des détails sur la syntaxe du filtre de commande ss.


Linux
  1. 7 Exemples de commandes Linux df

  2. 8 Exemples de commandes Linux TR

  3. ac Exemples de commandes sous Linux

  4. Exemples de commandes df sous Linux

  5. du Exemples de commandes sous Linux

16 exemples de commandes Echo sous Linux

9 exemples de commandes tee sous Linux

Exemples de commandes 20 ps pour surveiller les processus Linux

Comment utiliser la commande ss (Surveiller les connexions réseau)

Exemples de commandes Linux ifconfig

Exemples de commandes id sous Linux