GNU/Linux >> Linux Esercitazione >  >> Linux

Ottieni il numero di connessioni TCP stabilite

Usa il comando:

ss -neopt state established

Questo ti mostrerà solo le sessioni TCP in ESTABLISHED state, non è richiesto il piping ad altri comandi, quindi è super veloce.

ss è migliore di netstat perché il più vecchio netstat legge solo da procfs che è soggetto a blocchi di file. ss esegue effettivamente una query all'interno del kernel che viene gestita dallo scheduler del kernel e restituisce sempre informazioni accurate.


Utilizzare /proc per ridurre il carico di lavoro

Mi piace accedere alle variabili del kernel direttamente tramite /proc . Questo è molto efficiente, rapido e intuitivo.

C'è uno pseudo file (tabella delle variabili del kernel) chiamato /proc/net/tcp wherekernel archivia l'elenco delle connessioni TCP e dell'ascolto. Il sesto campo, chiamato st per stato potrebbe contenere 0A per una voce di ascolto e 01 per una connessione stabilita.

Conteggio TCP stabilito connessioni:

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

o

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

Tempo di esecuzione

Poiché questa domanda sta per sistema ad alto carico di lavoro. Ho fatto una piccola panca:

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

Ok La risposta di Tonioc è molto lenta, ma molto interessante per la sua verbosità. Quindi chiaramente non utilizzabile su sistemi ad alto carico di lavoro.

Questa panchina ti permette di vedere che if ss è uno strumento dedicato molto utile, che chiede /proc variabili potrebbero essere molto più veloci.


Controlla anche:527875.

netstat + grep è una buona e semplice opzione per poche connessioni, ma se hai un numero enorme di connessioni ti consiglio ss come consigliato in nixCraft.

Ad esempio: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. Come ottenere il numero di serie del disco rigido utilizzando Python

  2. Come ottenere solo il numero di righe di un file

  3. Come ottenere il numero di dischi fisici in Linux?

  4. Ottieni il valore corrente/predefinito di TCP initcwnd su Linux

  5. Come ottenere il numero del display che mi è stato assegnato da X

Come ottenere il numero di processori/core in Linux

Come ottenere le migliori prestazioni dal server Nginx

Limita il numero massimo di connessioni TCP ai server Web

Attacchi TCP:previsione del numero di sequenza TCP e attacchi di ripristino TCP

comando diff per ottenere solo il numero di righe diverse

Controlla il numero di connessioni attive sulla porta 80?