Usa el comando:
ss -neopt state established
Esto le mostrará solo sesiones TCP en ESTABLISHED
estado, no se requiere canalización a otros comandos, por lo que es súper rápido.
ss
es mejor que netstat
porque el mayor netstat
solo lee de procfs que está sujeto a bloqueos de archivos. ss
en realidad hace una consulta dentro del kernel que es manejada por el programador del kernel y siempre devuelve información precisa.
Uso de /proc para reducir la carga de trabajo
Me gusta acceder a las variables del kernel directamente a través de /proc
. Esto es muy eficiente, rápido y amigable con el sistema.
Hay un pseudo archivo (tabla de variables del kernel) llamado /proc/net/tcp
wherekernel almacena la lista de conexiones y escuchas TCP. El sexto campo, llamado st
para estado podría contener 0A
para una entrada de escucha y 01
para una conexión establecida.
Contando TCP establecido conexiones:
Usando grepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Usando awkawk </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 sedsed </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l
Tiempo de ejecución
Como esta pregunta representa un sistema de alta carga de trabajo. He hecho un pequeño banco:
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 respuesta de Tonioc es muy lenta, pero muy interesante por su verbosidad. Así que claramente no se puede usar en un sistema de alta carga de trabajo.
Este banco te permite ver que si ss
es una herramienta dedicada muy útil, preguntando /proc
las variables podrían ser mucho más rápidas.
Consulta también:527875.
netstat + grep
es una opción buena y simple para algunas conexiones, pero si tiene una gran cantidad de conexiones, recomendaría ss
como se recomienda en nixCraft.
Por ejemplo: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