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


Tal vez pueda interesarte


Compartí este artículo