Utilisation de la commande ss sous Linux pour afficher les détails sur les sockets

Le ss La commande est utilisée pour vider les statistiques de socket sur les systèmes Linux. Il sert de substitut à netstat commande et est souvent utilisé pour résoudre les problèmes de réseau.

Qu’est-ce qu’une prise ?

Pour tirer le meilleur parti de l’utilisation de ss commande, il est important de comprendre ce qu’est un socket. Un socket est un type de pseudo-fichier (c’est-à-dire qu’il ne s’agit pas d’un fichier réel) qui représente une connexion réseau. Un socket identifie à la fois l’hôte distant et le port auquel il se connecte afin d’envoyer des données entre les systèmes. Les sockets sont similaires aux tuyaux, sauf que les tuyaux ne facilitent que les connexions entre les processus sur le même système où les sockets fonctionnent sur le même système ou sur des systèmes différents. Contrairement aux tuyaux, les sockets fournissent également une communication bidirectionnelle.

Une fois qu’un socket est créé, les communications entre l’hôte local et un hôte distant prennent la forme de paquets réseau.

Utilisation de la commande ss

Sans argumentation, ss listera toutes les connexions réseau établies (ouvertes sans écoute), quel que soit leur état. Voici un exemple qui montre uniquement les premières lignes de la sortie de la commande plus une ligne avec les adresses IP :

$ ss | head -3; ss | grep 192 | tail -1
Netid State  Recv-Q Send-Q      Local Address:Port      Peer Address:Port      Process
u_str ESTAB  0      0                       * 31510                * 31511
u_str ESTAB  0      0                       * 30253                * 30254
tcp   ESTAB  0      288          192.168.0.18:ssh       192.168.0.17:activesync

Les champs comme indiqué dans ss La sortie de la commande ci-dessus inclut :

  • Dégager – Le type de socket – TCP, UDP, u_str (flux Unix) ou u_seq (séquence Unix)
  • État – L’état de la prise – ESTAB (établi), UNCONN (non connecté) et LISTEN (écoute)
  • Recv-Q – Le nombre de paquets reçus dans la file d’attente en attente de lecture
  • Envoyer-Q – Le nombre de paquets dans la file d’attente en attente d’envoi
  • Adresse locale : port – Adresse et port du système local
  • Adresse homologue : port – Adresse et port du système distant

Le * les caractères dans la sortie ci-dessus indiquent que les sockets écoutent le trafic sur toutes les adresses. J’ai inclus la dernière ligne pour montrer une connexion entre deux systèmes spécifiques – ce système et un chut connexion à un hôte local.

Vous pouvez vous attendre à voir des centaines de lignes de sortie lorsque vous utilisez le ss ordre Pour compter les connexions socket établies sur votre système (ajout d’une ligne pour l’entête), vous pouvez utiliser une commande comme celle-ci :

$ ss | wc -l
622

La commande ci-dessous, qui utilise ok regarder uniquement le deuxième champ de chaque ligne de ss sortie, indique qu’une prise n’est pas connectée alors que 620 connexions sont établies. Cette commande trie le contenu du champ “State”. La deuxième ligne de la sortie ci-dessous montre l’en-tête de cette colonne.

$ ss | awk '{print $2}' | sort | uniq -c
    620 ESTAB
      1 State
      1 UNCONN

En utilisant ss – un (afficher tous les sockets) la commande fera l’affaire ss la sortie affiche à la fois la prise d’écoute et la prise non écoutée. Pour TCP, “ne pas écouter” signifie des connexions établies tandis que “écouter” signifie attendre une connexion. Les commandes ci-dessous montrent la différence de volume de sortie.

$ ss | wc -l
617
$ ss -a | wc -l
820

Par exemple, le ss-a la sortie commencera probablement par une sortie comme celle-ci :

$ ss -a | head -7
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process nl UNCONN 0 0 rtnl:packagekitd/1032 * nl UNCONN 0 0 rtnl:evolution-calen/1685 * nl UNCONN 0 0 rtnl:kernel * nl UNCONN 0 0 rtnl:NetworkManager/772 * nl UNCONN 0 0 rtnl:abrt-applet/1863 * nl UNCONN 0 0 rtnl:goa-daemon/1653 *

Le Dégager les valeurs incluent:

  • icmp6 — Protocole de message de contrôle Internet
  • NL — lien net
  • TCP — protocole de contrôle de transmission (orienté connexion)
  • u_dgr — Datagrammes Unix
  • UDP — protocole de datagramme utilisateur (sans connexion)
  • u_seq — Séquences Unix
  • u_str — Unix_stream

Résumés des sockets

Pour obtenir un rapport récapitulatif sur les sockets, utilisez le -s option comme indiqué dans la commande ci-dessous.

$ ss -s
Total: 777
TCP:   9 (estab 1, closed 1, orphaned 0, timewait 1)

Transport Total     IP        IPv6
RAW       1         0         1
UDP       10        6         4
TCP       8         5         3
INET      19        11        8
FRAG      0         0         0

Utilisation d’un script pour afficher la sortie ss

Le script ci-dessous extrait et résume le contenu de n’importe quel champ du ss sortie de commande.

Si vous ajoutez -une en tant qu’argument (ou, en fait, n’importe quel argument unique), le script résumera la sortie de ss-a commande au lieu de la ss commande sans options. Sélectionnez n’importe quel champ par numéro pour sélectionner cette colonne.

#!/bin/bash

if [ $# != 0 ]
then
  ss="ss -a"
else
  ss="ss"
fi

echo "What column do you want to see?"
echo 1: Netid
echo 2: State
echo 3: Recv-Q
echo 4: Send-Q
echo 5: Local Address:Port
echo 6: Peer Address:Port
echo 7: Process

echo -n "> "
read number

case $number in
1) echo Netid; $ss | tail -n+2 | awk '{print $1}' | sort | uniq -c;;
2) echo State; $ss | tail -n+2 | awk '{print $2}' | sort | uniq -c;;
3) echo Recv-Q; $ss | tail -n+2 | awk '{print $3}' | sort | uniq -c;;
4) echo Send-Q; $ss | tail -n+2 | awk '{print $4}' | sort | uniq -c;;
5) echo Local Address:Port; $ss | tail -n+2 | awk '{print $5}' | sort | uniq -c;;
6) echo Peer Address:port; $ss | tail -n+2 | awk '{print $6}' | sort | column;;
7) echo Process; $ss | tail -n+2 | awk '{print $7}' | sort | uniq -c;;
*) echo "huh?";;
esac

Par exemple, pour vérifier combien de fois chaque Dégager valeur apparaîtra, vous pouvez exécuter le script comme ceci :

$ ss_summary
What column do you want to see?
1: Netid
2: State
3: Recv-Q
4: Send-Q
5: Local Address:Port
6: Peer Address:Port
7: Process
> 1
Netid
      1 icmp6
      1 tcp
     46 u_dgr
      1 udp
    567 u_str

Demander de l’aide

Utilisez le ss-h commande pour obtenir une liste des nombreuses options de la commande avec une brève description.

$ ss -h
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help          this message
   -V, --version       output version information
   -n, --numeric       don't resolve service names
   -r, --resolve       resolve host names
   -a, --all           display all sockets
   -l, --listening     display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes     show process using socket
   -i, --info          show internal TCP information
       --tipcinfo      show internal tipc socket information
   -s, --summary       show socket usage summary
       --tos           show tos and priority information
       --cgroup        show cgroup information
   -b, --bpf           show bpf filter socket information
   -E, --events        continually display sockets as they are destroyed
   -Z, --context       display process SELinux security contexts
   -z, --contexts      display process and socket SELinux security contexts
   -N, --net           switch to the specified network namespace name
   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet        display PACKET sockets
   -t, --tcp           display only TCP sockets
   -M, --mptcp         display only MPTCP sockets
   -S, --sctp          display only SCTP sockets
   -u, --udp           display only UDP sockets
   -d, --dccp          display only DCCP sockets
   -w, --raw           display only RAW sockets
   -x, --unix          display only Unix domain sockets
       --tipc          display only TIPC sockets
       --vsock         display only vsock sockets
   -f, --family=FAMILY display sockets of type FAMILY
       FAMILY := {inet|inet6|link|unix|netlink|vsock|tipc|xdp|help}
   -K, --kill          forcibly close sockets, display what was closed
   -H, --no-header     Suppress header line
   -O, --oneline       socket's data printed on a single line
       --inet-sockopt  show various inet socket options
   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|mptcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink|vsock_stream|vsock_dgram|tipc}[,QUERY]
   -D, --diag=FILE     Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
       STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
         TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listening|closing}
          connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
       synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
             bucket := {syn-recv|time-wait}
                big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listening|closing}

Remarque qui comprend -S choix, ss n’affichera que les sockets SCTP. Avec le -une choix, ss affichera les sockets d’écoute et de non-écoute de chaque type. Avec le -l paramètres, ss affichera les sockets d’écoute (désactivés par défaut). Avec le -e choix, ss affichera des informations détaillées sur la prise. Ce ne sont là que quelques-unes des options disponibles. Consultez la liste ci-dessus ou utilisez le ss-h pour afficher les options disponibles sur votre hôte Linux.

conclure

Le ss La commande peut fournir des détails importants sur les sockets – probablement plus que certains d’entre nous ne pensaient disponibles. S’habituer à la commande et à son large éventail d’options peut prendre du temps, mais ce niveau de détail peut être utile pour comprendre comment vos systèmes Linux interagissent entre eux et avec ce système externe.

Copyright © 2022 IDG Communications, Inc.

Leave a Reply

Your email address will not be published. Required fields are marked *