GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir le nombre de connexions TCP établies

Utilisez la commande :

ss -neopt state established

Cela vous montrera uniquement les sessions TCP dans ESTABLISHED état, aucune canalisation vers d'autres commandes requises, donc c'est super rapide.

ss vaut mieux que netstat parce que l'ancien netstat lit simplement à partir de procfs qui est soumis à des verrous de fichiers. ss effectue en fait une requête à l'intérieur du noyau qui est gérée par le planificateur du noyau et renvoie toujours des informations précises.


Utiliser /proc pour réduire la charge de travail

J'aime accéder aux variables du noyau directement via /proc . C'est très efficace, rapide et convivial.

Il existe un pseudo fichier (table des variables du noyau) nommé /proc/net/tcp wherekernel stocke la liste des connexions et des écoutes TCP. Le 6ème champ, appelé st pour état peut contenir 0A pour une entrée d'écoute et 01 pour une connexion établie.

Comptage TCP établi connexions :

En utilisant grep
grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
En utilisant awk
awk  </proc/net/tcp 'BEGIN{t=0};{if ($4 == "01") {t++;}};END{print t}'

ou

awk  </proc/net/tcp 'BEGIN{t=0};/^ *[0-9]+: [0-9A-F: ]{27} 01 /{t++};END{print t}'
En utilisant sed
sed  </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l

Temps d'exécution

Comme cette question représente un système à charge de travail élevée. J'ai fait un petit banc :

Method                                Answer by     Milliseconds

grep                                  Techno        2.48
awk no regexp ($4=="01")                            2.51
sed | wc                                            2.67
awk with regexp                                     2.93

ss -neopt state established | wc -l   Suprjami     15.14
lsof -i tcp -s tcp:ESTABLISHED        Tonioc    25055.00

La réponse d'Ok Tonioc est très lente, mais très intéressante par sa verbosité. Donc clairement inutilisable sur un système à charge de travail élevée.

Ce banc vous permet de voir que si ss est un outil dédié très utile, demandant /proc les variables pourraient être beaucoup plus rapides.


Vérifiez également :527875.

netstat + grep est une bonne et simple option pour quelques connexions, mais si vous avez un grand nombre de connexions, je recommanderais ss comme recommandé dans nixCraft.

Par exemple :ss -s

Total: 78 (kernel 79)
TCP:   31 (estab 27, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 16

Transport Total     IP        IPv6
*     79        -         -        
RAW   0         0         0        
UDP   4         2         2        
TCP   31        2         29       
INET      35        4         31       
FRAG      0         0         0  

Linux
  1. Comment obtenir le numéro de série du disque dur en utilisant Python

  2. Comment obtenir le nombre de CPU sous Linux en utilisant C ?

  3. Comment tuer une seule connexion TCP sous Linux ?

  4. Node.js - Obtenir le nombre de processeurs disponibles

  5. commande diff pour obtenir le nombre de lignes différentes uniquement

Comment obtenir le nombre de processeurs/cœurs sous Linux

Comment obtenir les meilleures performances du serveur Nginx

Attaques TCP :prédiction du numéro de séquence TCP et attaques de réinitialisation TCP

Obtenir la valeur actuelle/par défaut de TCP initcwnd sous Linux

Connexion de transfert PuTTY, CygwinX et X11 refusée

vider les connexions tcp sans tcpdump