Utilizando la herramienta netstat
es posible listar las conexiones TCP y UDP establecidas en un sistema GNU/Linux. De esta manera es posible tener una noción del número de clientes conectados con nuestro servidor. Aunque, jugando un poco con la salida de netstat
, también es posible determinar exactamente el número total de conexiones establecidas y el número de clientes únicos por IP.
Para listar todas las conexiones TCP y UDP en todos los estados posibles (ver la página de manual) recurrir al comando netstat -tun
. Si además se desea conocer el proceso con el que está establecida cada conexión, se agrega la opción -p
. Luego es posible filtrar, utilizando grep
, para quedarse sólo con las conexiones establecidas:
root@linuxito:~# netstat -tupn | grep EST tcp 0 0 192.184.81.204:80 213.143.50.63:32979 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:80 213.143.50.63:27156 ESTABLISHED 1748/nginx: worker tcp 0 70913 192.184.81.204:80 190.52.133.2:42781 ESTABLISHED 1750/nginx: worker tcp 0 45865 192.184.81.204:80 190.52.133.2:42785 ESTABLISHED 1750/nginx: worker tcp 0 0 192.184.81.204:443 190.52.133.2:54315 ESTABLISHED 1747/nginx: worker tcp 0 0 192.184.81.204:443 81.45.95.253:55127 ESTABLISHED 1749/nginx: worker tcp 0 18008 192.184.81.204:80 190.52.133.2:7942 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:443 190.52.133.2:9387 ESTABLISHED 1748/nginx: worker tcp 0 0 192.184.81.204:443 190.52.133.2:9312 ESTABLISHED 1748/nginx: worker tcp 0 0 192.184.81.204:443 190.52.133.2:54310 ESTABLISHED 1747/nginx: worker tcp 0 13410 192.184.81.204:80 190.52.133.2:9105 ESTABLISHED 1749/nginx: worker tcp 0 13481 192.184.81.204:80 190.52.133.2:9171 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:443 46.35.119.160:51574 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:80 213.143.50.63:45017 ESTABLISHED 1749/nginx: worker tcp 0 137 192.184.81.204:443 46.35.119.160:51572 ESTABLISHED 1748/nginx: worker tcp 0 0 192.184.81.204:443 213.143.50.63:46766 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:443 190.52.133.2:9310 ESTABLISHED 1747/nginx: worker tcp 0 8161 192.184.81.204:443 46.35.119.160:51570 ESTABLISHED 1750/nginx: worker tcp 0 0 192.184.81.204:443 213.143.50.63:31732 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:80 213.143.50.63:3384 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:443 213.143.50.63:24203 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:443 213.143.50.63:22370 ESTABLISHED 1748/nginx: worker tcp 0 137 192.184.81.204:443 46.35.119.160:51573 ESTABLISHED 1749/nginx: worker tcp 0 137 192.184.81.204:443 46.35.119.160:51571 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:443 85.61.2.205:54631 ESTABLISHED 1748/nginx: worker tcp 0 0 192.184.81.204:443 190.52.133.2:54313 ESTABLISHED 1748/nginx: worker tcp 0 0 192.184.81.204:443 46.35.119.160:51575 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:443 186.106.200.14:62581 ESTABLISHED 1750/nginx: worker tcp 0 9628 192.184.81.204:80 190.52.133.2:9148 ESTABLISHED 1750/nginx: worker tcp 0 0 192.184.81.204:443 213.143.50.63:64784 ESTABLISHED 1748/nginx: worker tcp 0 0 192.184.81.204:443 213.143.50.63:64149 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:80 213.143.50.63:12862 ESTABLISHED 1748/nginx: worker tcp 0 91000 192.184.81.204:80 169.158.176.210:37794 ESTABLISHED 1749/nginx: worker tcp 0 0 192.184.81.204:80 213.143.50.63:10278 ESTABLISHED 1748/nginx: worker
Si sólo se desea conocer el número de conexiones establecidas, utilizar wc
:
root@linuxito:~# netstat -tun | grep EST | wc -l 59
Claro que un cliente puede establecer varias conexiones simultáneamente. Por ejemplo, al momento de cargar una página Web, cada cliente establece varias conexiones en simultáneo con el servidor HTTP, para descargar los recursos de la página en paralelo (y de esta forma acelerar la descarga de la página).
Eliminando los espacios en blanco repetidos y cortando la IP remota (Foreign Address), es posible obtener el listado de clientes únicos (por IP):
root@linuxito:~# netstat -tun | grep EST | tr -s '[:space:]' | cut -d':' -f2 | cut -d' ' -f2 | sort | uniq 104.154.198.228 146.148.67.171 178.156.17.209 181.176.67.60 51.255.71.111 85.61.2.205
Otras opciones útiles de netstat
Con la opción -e
es posible visualizar información adicional como el ID de usuario y número de i-nodo:
root@linuxito:~# netstat -tupnee | head -n 2 Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
Con -s
, netstat
muestra estadísticas para cada protocolo. Por ejemplo, para ver las estadísticas del protocolo ICMP:
root@linuxito:~# netstat -s | grep 'Icmp:' -A 13 Icmp: 34004 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 21007 timeout in transit: 1240 redirects: 13 echo requests: 11744 11792 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 1 echo request: 3 echo replies: 11744
Por último, el modo continuo imprime la información seleccionada cada 1 segundo de manera continua. Sólo basta agregar la opción -c
.
Referencias
man netstat