Come posso verificare quante connessioni sono aperte attualmente su una porta TCP specifica?


8

Sto facendo alcuni benchmark sulle comete e vorrei vedere quante connessioni aperte ho.

In realtà utilizzo netstat:

netstat -ant | grep 8080 | grep EST | wc -l

Ma sono necessari circa 4-6 minuti per elencare il numero, esiste qualche strumento in grado di mostrarlo in tempo reale? Il numero di connessioni aperte è compreso tra 100'000 - 250'000.


Sulla base di ciò che stai cercando di realizzare, hai preso in considerazione l'utilizzo di NetFlow e uno strumento di analisi?
SpacemanSpiff

@SpacemanSpiff Spero che ci sia una soluzione semplice, ma darò un'occhiata a NetFlow poiché non sono sicuro che funzioni con uno switch HP.
Nenad,

Sai, mi chiedo se una query perfmon o WMI potrebbe riportare questi dati dallo stack TCP più velocemente ... ancora ... stai cercando porte aperte o trasferimenti di dati attivi?
SpacemanSpiff

@SpacemanSpiff Sto cercando porte aperte
Nenad,

Forse una query SNMP? ... stai solo lanciando idee per te.
SpacemanSpiff

Risposte:


8

Non so se lsofè meglio, ma provalo:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l

in realtà bastano 5 secondi, ma ho 20'000 connessioni e il conteggio :-) ti farà sapere per quanto tempo dopo il passaggio 100K
Nenad,

aggiornamento: ho alcuni problemi con i nostri client di comete, ma lsof è molto più veloce di 10 secondi per 30'000 connessioni, si aggiorna dopo che ho risolto i problemi della cometa e sono stato in grado di controllare oltre 100K connessioni
Nenad,

aggiornamento: 15sec per mostrare 130'000 connessioni - grazie! Questo fa il lavoro per me per una soluzione più dettagliata che un analizzatore di rete deve essere usato.
Nenad,

wonderfull! Potresti anche usare l'interruttore -t- forse questo ti darà anche un piccolo impulso.
Thorsten

5

Se hai solo bisogno di vedere le statistiche di connessione, prova l' ssutilità dalla iproutesuite:

# ss -s
Total: 1788 (kernel 3134)
TCP:   1638 (estab 1409, closed 162, orphaned 0, synrecv 0, timewait 127/0), ports 0

Transport Total     IP        IPv6
*         3134      -         -        
RAW       0         0         0        
UDP       74        69        5        
TCP       1476      1444      32       
INET      1550      1513      37       
FRAG      0         0         0     

È inoltre possibile visualizzare informazioni dettagliate su tutte le connessioni stabilite come questa:

ss -n state established

... o solo connessioni ssh:

ss -n state established '( dport = :ssh or sport = :ssh )'

Alcune sezioni di numeri nella parte inferiore di questa pagina potrebbero interessarti.


+1 per non usare netstat deprecato
Joshua Griffiths,

So che è di 6 anni fa, ma tu o chiunque altro avete un collegamento a qualcosa che interrompe l'output dello stato di ss. Sono particolarmente curioso del conteggio delle porte alla fine della linea TCP. Sto facendo dei test comparativi tra due server che fungono da bilanciamento del carico e da un lato il conteggio delle porte si aggira intorno a 1000 e dall'altro è sempre 0. Che cosa è specificamente quel conteggio?
RobertRSeattle,

1
@RobertRSeattle tramite il codice sorgente ss sembra che questo numero venga letto dalla tcp_bind_bucketriga del /proc/slabinfofile. Potresti voler confrontare l'output awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfotra due dei tuoi server. Ulteriori dettagli possono essere probabilmente trovati da qualche parte nei sorgenti del kernel.
artyom l'

1

Un'altra opzione sarebbe quella di leggere /proc/net/tcpdirettamente. Per vedere tutte le connessioni TCP stabilite su, 8080, dovresti fare qualcosa del genere

$ printf %04X 8080
1F90
$ grep :1F90 /proc/net/tcp | grep ' 01 ' | wc -l

Se si desidera farlo in un unico processo (meno sovraccarico di I / O) e gestire i casi angolari, quanto segue indica quante connessioni TCP STABILITE hanno la porta locale 8080:

$ perl -anle '
          $F[1] =~ /:1F90/ and $F[3] =~ /01/ and $cnt++;
          END { print 0+$cnt }
         '  /proc/net/tcp

Se il software sulla tua macchina in ascolto su 8080 ha il supporto IPv6, dovrai leggere /proc/net/tcp6anche; se il programma utilizza socket IPv6, le connessioni verranno visualizzate anche se utilizzano IPv4.


0

più facile è

#netstat -at | wc -l

Visualizzerà il numero di connessione TCP sul sistema ...


Questo richiederà più tempo poiché non stai usando il flag "n" per impedirgli di cercare tutti i nomi host. Mostrerà anche altre cose oltre alle connessioni della porta 8080 di cui si trattava.
Jenny D,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.