¿Cómo verifico cuántas conexiones están abiertas actualmente en un puerto TCP específico?

8

Estoy haciendo algunos puntos de referencia de cometas y me gustaría ver cuántas conexiones abiertas tengo.

En realidad uso netstat:

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

Pero necesita alrededor de 4 a 6 minutos para enumerar el número, ¿hay alguna herramienta que pueda mostrarlo en tiempo real? El número de conexiones abiertas es entre 100'000 - 250'000.

Nenad
fuente
Según lo que está tratando de lograr, ¿ha considerado usar NetFlow y una herramienta de análisis?
SpacemanSpiff
@SpacemanSpiff Espero que haya una solución fácil, pero echaré un vistazo a NetFlow ya que no estoy seguro de si funciona con un conmutador HP.
Nenad
Sabes, me pregunto si una consulta de perfmon o WMI podría recuperar estos datos de la pila TCP más rápido ... aún así ... ¿estás buscando puertos abiertos o transferencias de datos activas?
SpacemanSpiff
@SpacemanSpiff Estoy buscando puertos abiertos buscando
Nenad
¿Quizás una consulta SNMP? ... simplemente arrojando ideas para usted.
SpacemanSpiff

Respuestas:

8

No sé si lsofes mejor, pero prueba esto:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l
ThorstenS
fuente
De hecho, tomo 5 segundos, pero tengo 20'000 conexiones y contando :-) te dejaré saber cuánto tiempo después de pasar 100K
Nenad
actualización: tengo algunos problemas con nuestros clientes de cometas, pero lsof es mucho más rápido 10 segundos para 30'000 conexiones, se actualizará después de que solucioné los problemas del cometa y pude verificar las conexiones por encima de 100K
Nenad
actualización: 15 segundos para mostrar 130'000 conexiones - ¡gracias! Esto hace el trabajo por mí para una solución más detallada que se debe utilizar un analizador de red.
Nenad
maravilloso! También podría usar el interruptor -t, tal vez esto también le dará un pequeño impulso.
ThorstenS
5

Si solo necesita ver estadísticas de conexión, pruebe la ssutilidad 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     

También puede ver información detallada sobre todas las conexiones establecidas como esta:

ss -n state established

... o solo conexiones ssh:

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

Algunas secciones de números al final de esta página también pueden interesarle.

artyom
fuente
+1 por no usar el netstat obsoleto
Joshua Griffiths
Sé que esto es de hace 6 años, pero ¿usted o alguien más tiene un enlace a algo que descomponga la salida de estado de SS? Tengo curiosidad específica sobre el recuento de puertos al final de la línea TCP. Estoy haciendo algunas pruebas de comparación entre dos servidores que actúan como equilibradores de carga y en uno el recuento de puertos oscila alrededor de 1000 y en el otro siempre es 0. ¿Qué es específicamente ese conteo?
RobertRSeattle
1
@RobertRSeattle por código fuente ss parece que este número se lee desde la tcp_bind_bucketlínea de /proc/slabinfoarchivo. Es posible que desee comparar la salida de awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfoentre dos de sus servidores. Es probable que se encuentren más detalles en algún lugar de las fuentes del núcleo.
artyom
1

Otra opción sería leer /proc/net/tcpdirectamente. Para ver todas las conexiones TCP establecidas en 8080, haría algo como

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

Si desea hacerlo en un solo proceso (menos sobrecarga de E / S) y manejar casos de esquina, a continuación se le indica cuántas conexiones TCP ESTABLECIDAS tienen el puerto local 8080:

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

Si el software en su máquina que escucha en 8080 tiene soporte para IPv6, necesitará leer /proc/net/tcp6también; si el programa usa sockets IPv6, las conexiones aparecerán allí incluso si están usando IPv4.

jon
fuente
0

más fácil es

#netstat -at | wc -l

Mostrará el número de conexiones TCP en el sistema ...

usuario162048
fuente
Esto llevará más tiempo ya que no está utilizando la bandera "n" para evitar que busque todos los nombres de host. También mostrará otras cosas además de las conexiones del puerto 8080 sobre las que se trató la pregunta.
Jenny D