Comment vérifier combien de connexions sont actuellement ouvertes sur un port TCP spécifique?

8

Je fais des tests de performances de comètes et j'aimerais voir combien de connexions ouvertes j'ai.

En fait, j'utilise netstat:

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

Mais il faut environ 4 à 6 minutes pour répertorier le nombre, existe-t-il un outil qui peut le montrer en temps réel? Le nombre de connexions ouvertes se situe entre 100'000 - 250'000.

Nenad
la source
D'après ce que vous essayez d'accomplir, avez-vous envisagé d'utiliser NetFlow et un outil d'analyseur?
SpacemanSpiff
@SpacemanSpiff J'espère qu'il existe une solution simple, mais je vais jeter un œil sur NetFlow car je ne suis pas sûr de travailler avec un commutateur HP.
Nenad
Vous savez, je me demande si une requête perfmon ou WMI pourrait ramener ces données plus rapidement de la pile TCP ... encore ... êtes-vous après des ports ouverts ou des transferts de données actifs?
SpacemanSpiff
@SpacemanSpiff Je cherche des ports ouverts
Nenad
Peut-être une requête SNMP? ... je lance juste des idées pour vous.
SpacemanSpiff

Réponses:

8

Je ne sais pas si lsofc'est mieux, mais essayez ceci:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l
ThorstenS
la source
en fait, lsof prend 5 secondes, mais j'ai 20'000 connexions et je compte :-) vous indiquera combien de temps après le passage 100K
Nenad
mise à jour: rencontrez des problèmes avec nos clients de comètes, mais lsof est beaucoup plus rapide 10 secondes pour 30'000 connexions, sera mis à jour après avoir résolu les problèmes de comètes et j'ai pu vérifier les connexions au-dessus de 100K
Nenad
mise à jour: 15sec pour afficher 130'000 connexions - merci! Cela fait le travail pour moi pour une solution plus détaillée, un analyseur de réseau doit être utilisé.
Nenad
magnifique! Vous pouvez également utiliser le commutateur -t- peut-être que cela vous donnera également un petit coup de pouce.
ThorstenS
5

Si vous avez juste besoin de voir les statistiques de connexion, essayez l' ssutilitaire de la 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     

Vous pouvez également afficher des informations détaillées sur toutes les connexions établies comme celle-ci:

ss -n state established

… Ou connexions ssh uniquement:

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

Certaines sections de chiffres au bas de cette page peuvent également vous intéresser.

artyom
la source
+1 pour ne pas avoir utilisé le netstat obsolète
Joshua Griffiths
Je sais que cela date d'il y a 6 ans, mais vous ou quelqu'un d'autre avez-vous un lien vers quelque chose qui décompose la sortie d'état SS. Je suis particulièrement curieux de savoir le nombre de ports à la fin de la ligne TCP. Je fais des tests de comparaison entre deux serveurs agissant comme des équilibreurs de charge et sur l'un le nombre de ports oscille autour de 1000 et sur l'autre, il est toujours 0. Qu'est-ce que ce comptage?
RobertRSeattle
1
@RobertRSeattle par le code source SS, il semble que ce numéro soit lu à partir de la tcp_bind_bucketligne de /proc/slabinfofichier. Vous pouvez comparer la sortie awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfoentre deux de vos serveurs. De plus amples détails peuvent être trouvés quelque part dans les sources du noyau.
artyom
1

Une autre option serait de lire /proc/net/tcpdirectement. Pour voir toutes les connexions TCP établies sur 8080, vous feriez quelque chose comme

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

Si vous souhaitez le faire en un seul processus (moins de surcharge d'E / S) et gérer les cas d'angle, ce qui suit vous indique combien de connexions TCP ÉTABLIES ont le port local 8080:

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

Si le logiciel de votre machine en écoute sur 8080 prend en charge IPv6, vous devrez /proc/net/tcp6également lire ; si le programme utilise des sockets IPv6, les connexions y apparaîtront même si elles utilisent IPv4.

Jon
la source
0

plus facile est

#netstat -at | wc -l

Il affichera le nombre de connexion TCP sur le système ...

user162048
la source
Cela prendra plus de temps car vous n'utilisez pas l'indicateur "n" pour l'empêcher de rechercher tous les noms d'hôtes. Il montrera également d'autres choses que les connexions du port 8080 sur lesquelles portait la question.
Jenny D