Aprenda qué es el comando netstat y algunos ejemplos en tiempo real.

netstat (estadísticas de red) es una herramienta de línea de comandos que muestra las conexiones de red (tanto entrantes como salientes), las tablas de enrutamiento y una serie de estadísticas de las interfaces de red.

Está disponible en los sistemas operativos Linux, Unix-like y Windows. netstat es potente y puede ser una herramienta muy útil para solucionar problemas relacionados con la red y verificar las estadísticas de conexión.

Si escribe netstat -help, obtendrá las siguientes directrices de uso.

[root@lab ~]# netstat -help
usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [<Socket> ...]
       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

        -r, --route mostrar tabla de enrutamiento
        -I, --interfaces=<Iface> mostrar tabla de interfaces para <Iface>
        -i, --interfaces mostrar tabla de interfaces
        -g, --groups muestra la pertenencia a grupos de multidifusión
        -s, --statistics muestra las estadísticas de red (como SNMP)
        -M, --masquerade muestra las conexiones enmascaradas

        -v, --verbose ser verboso
        -W, --wide no truncar las direcciones IP
        -n, --numeric no resolver nombres
        --numeric-hosts no resuelve nombres de host
        --numeric-ports no resuelve nombres de puertos
        --numeric-users no resuelve los nombres de usuario
        -N, --symbolic resolver nombres de hardware
        -e, --extend mostrar otra/más información
        -p, --programs muestra el PID/nombre del programa para los sockets
        -o, --timers mostrar temporizadores
        -c, --continuo listado continuo

        -l, --listening muestra las tomas del servidor a la escucha
        -a, --all muestra todas las tomas (por defecto: conectadas)
        -F, --fib muestra la base de información de reenvío (por defecto)
        -C, --cache muestra la caché de enrutamiento en lugar de la FIB
        -Z, --context muestra el contexto de seguridad SELinux para los sockets

  <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
           {-x|--unix} --ax25 --ipx --netrom
  <AF>=Utilice '-6|-4' o '-A <af>' o '--<af>'; por defecto: inet
  Lista de posibles familias de direcciones (que admiten enrutamiento):
    inet (Internet DARPA) inet6 (IPv6) ax25 (AMPR AX.25) 
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) 
    x25 (CCITT X.25) 
[root@lab ~]#

Permítame mostrarle algunos ejemplos del comando. Los siguientes están probados en RHEL/CentOS, pero no veo ninguna razón para que no funcionen en otra distro como Ubuntu.

Conexión establecida

Si está buscando todas las conexiones establecidas del servidor.

[root@lab ~]# netstat -natu | grep 'ESTABLISHED'
tcp 0 21 68.183.37.102:22 222.186.31.135:21714 ESTABLISHED
tcp 0 36 68.183.37.102:22 52.148.155.182:49859 ESTABLISHED
tcp 0 0 68.183.37.102:22 61.177.142.158:55481 ESTABLECIDO
[root@lab ~]#

Si tiene muchas conexiones establecidas y le interesa buscar una de las IP, puede utilizar otro grep.

[root@lab ~]# netstat -natu | grep 'ESTABLISHED' | grep 61.177.142.158
tcp 0 1280 68.183.37.102:22 61.177.142.158:33932 ESTABLISHED
[root@lab ~]#

Conexión de escucha

Digamos que ha iniciado algún servicio, y que se supone que debe escuchar en una IP:Puerto en particular, esto sería útil para verificarlo.

[root@lab ~]# netstat -an | grep 'LISTEN'
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN     
tcp 0 0.0.0.0:111 0.0.0.0:* LISTEN     
tcp 0 0.0.0.0:22 0.0.0.0:* LISTEN     
tcp6 0 0 :::111 :::* LISTEN     
tcp6 0 0 :::80 :::* LISTEN     
tcp6 0 0 :::22 :::* LISTEN     
[root@lab ~]#

O bien, puede utilizar el argumento -l para mostrar todos los sockets a la escucha.

[root@lab ~]# netstat -l
Conexiones activas a Internet (sólo servidores)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado      
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN     
tcp 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN     
tcp 0 0.0.0.0:ssh 0.0.0.0:* LISTEN     
tcp6 0 0 [::]:sunrpc [::]:* LISTEN     
tcp6 0 0 [::]:webcache [::]:* LISTEN     
tcp6 0 0 [::]:ssh [::]:* LISTEN     
udp 0 0.0.0.0:805 0.0.0.0:*         
udp 0 0.0.0.0:sunrpc 0.0.0.0:*         
udp 0 0 localhost:323 0.0.0.0:*         
udp6 0 0 [::]:805 [::]:*      
udp6 0 0 [::]:sunrpc [::]:*      
udp6 0 0 ip6-localhost:323 [::]:*      
Sockets de dominio UNIX activos (sólo servidores)
Proto RefCnt Flags Tipo Estado I-Node Path
unix 2 [ ACC ] STREAM LISTENING 15108 /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 8202 /run/systemd/journal/stdout
unix 2 [ ACC ] ESCUCHA SEQPACKET 12813 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 17542 public/pickup
unix 2 [ ACC ] STREAM LISTENING 15165 /var/run/rpcbind.sock
unix 2 [ ACC ] STREAM LISTENING 17546 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 15605 /var/lib/gssproxy/default.sock
unix 2 [ ACC ] STREAM LISTENING 12706 /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 17549 public/qmgr
unix 2 [ ACC ] STREAM LISTENING 17571 public/flush
unix 2 [ ACC ] STREAM LISTENING 17553 private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 17586 public/showq
unix 2 [ ACC ] STREAM LISTENING 17556 private/rewrite
unix 2 [ ACC ] STREAM LISTENING 17559 private/bounce
unix 2 [ ACC ] STREAM LISTENING 17562 private/defer
unix 2 [ ACC ] STREAM LISTENING 17565 private/trace
unix 2 [ ACC ] STREAM LISTENING 17568 private/verify
unix 2 [ ACC ] STREAM LISTENING 17574 private/proxymap
unix 2 [ ACC ] STREAM LISTENING 17577 private/proxywrite
unix 2 [ ACC ] STREAM LISTENING 17580 private/smtp
unix 2 [ ACC ] STREAM LISTENING 17583 private/relay
unix 2 [ ACC ] STREAM LISTENING 17589 private/error
unix 2 [ ACC ] STREAM LISTENING 17592 private/retry
unix 2 [ ACC ] STREAM LISTENING 17595 private/discard
unix 2 [ ACC ] STREAM LISTENING 17598 private/local
unix 2 [ ACC ] ESCUCHA STREAM 17601 privado/virtual
unix 2 [ ACC ] STREAM LISTENING 17604 private/lmtp
unix 2 [ ACC ] STREAM LISTENING 17607 privado/anvil
unix 2 [ ACC ] STREAM LISTENING 17610 private/scache
unix 2 [ ACC ] STREAM LISTENING 15606 /run/gssproxy.sock
[root@lab ~]#

Aproveche grep para filtrar los resultados.

Número de puerto utilizado por PID

Sabe que su aplicación se ha iniciado y conoce el PID (Identificador de Proceso) pero no está seguro de cuál es el número de puerto que está utilizando. El ejemplo de abajo es para el PID 3937

[root@lab ~]# netstat -anlp |grep 3937
tcp6 0 0 :::80 :::* LISTEN 3937/httpd          
unix 3 [ ] STREAM CONNECTED 2442387 3937/httpd          
[root@lab ~]#

Como puede ver, se está utilizando el puerto 80 para el PID 3937.

Estadísticas de todos los protocolos

¿Tiene desconexiones frecuentes debido a paquetes descartados? – s le mostrará las estadísticas generales donde puede prestar atención a los mensajes de paquetes descartados.

[root@lab ~]# netstat -s
Ip:
    731422 total de paquetes recibidos
    0 reenviados
    0 paquetes entrantes descartados
    731399 paquetes entrantes entregados
    787732 solicitudes enviadas
    16 descartadas por falta de ruta
Icmp
    5277 mensajes ICMP recibidos
    120 mensajes ICMP de entrada fallidos
    InCsumErrors: 6
    Histograma de entrada ICMP:
        destino inalcanzable: 193
        tiempo de espera en tránsito: 16
        peticiones de eco: 5060
        respuestas echo: 2
    9355 mensajes ICMP enviados
    0 mensajes ICMP fallidos
    Histograma de salida ICMP:
        destino inalcanzable 4295
        respuestas eco: 5060
IcmpMsg:
        InType0: 2
        InType3: 193
        EnTipo8: 5060
        EnTipo11: 16
        SalidaTipo0: 5060
        SalidaTipo3: 4295
Tcp
    42 aperturas de conexiones activas
    35226 aperturas de conexión pasivas
    1693 intentos de conexión fallidos
    645 reinicios de conexión recibidos
    2 conexiones establecidas
    646705 segmentos recibidos
    648037 segmentos enviados
    99463 segmentos retransmitidos
    27377 segmentos malos recibidos
    150893 reinicios enviados
    InCsumErrores: 27377
Udp:
    74547 paquetes recibidos
    4814 paquetes a puerto desconocido recibidos.
    56 errores de recepción de paquetes
    74584 paquetes enviados
    0 errores de búfer de recepción
    0 errores de búfer de envío
    InCsumErrors: 56
UdpLite
TcpExt:
    177 cookies SYN inválidas recibidas
    1693 reinicios recibidos para sockets SYN_RECV embrionarios
    316 sockets TCP finalizados tiempo de espera en temporizador rápido
    3 paquetes rechazados en conexiones establecidas a causa del timestamp
    70248 acks retrasados enviados
    6 acks retrasados más retrasados debido a socket bloqueado
    El modo de ack rápido se activó 3082 veces
    17 SYN a sockets LISTEN descartados
    28179 paquetes directamente en cola de espera recvmsg
    9802 bytes recibidos directamente en contexto de proceso desde prequeue
    72106 cabeceras de paquete previstas
    94182 acuses de recibo que no contienen carga útil de datos recibidos
    40094 acuses de recibo previstos
    332 veces recuperadas de la pérdida de paquetes mediante acuses de recibo selectivos
    8 ventanas de congestión recuperadas sin inicio lento por DSACK
    1173 ventanas de congestión recuperadas sin inicio lento tras acuse parcial
    1029 tiempos de espera tras recuperación por SACK
    8 tiempos de espera en estado de pérdida
    329 retransmisiones rápidas
    3 retransmisiones hacia adelante
    32 retransmisiones en inicio lento
    44785 otros tiempos de espera TCP
    TCPLossProbes: 9763
    TCPLossProbeRecovery: 1732
    54 retransmisiones SACK fallidas
    3144 DSACKs enviados por paquetes antiguos
    4 DSACKs enviados por paquetes fuera de servicio
    695 DSACKs recibidos
    1 DSACKs para paquetes fuera de servicio recibidos
    44 conexiones reiniciadas debido a datos inesperados
    76 conexiones anuladas debido a un cierre anticipado del usuario
    6079 conexiones abortadas debido a timeout
    TCPDSACKIgnoredNoUndo: 448
    TCPSpuriousRTOs 5
    TCPSackShiftFallback 465
    IPReversePathFilter: 11
    TCPRcvCoalesce 32369
    TCPOFOQueue: 4313
    TCPOFOMerge: 4
    TCPChallengeACK: 2
    TCPSynRetrans: 43670
    TCPOrigDataSent: 208010
    TCPACKSkippedSeq: 12
IpExt:
    InNoRoutes: 12
    InOctets 133789295
    OutOctets: 151093769
    InNoECTPkts: 731338
    InECT1Pkts: 3
    InECT0Pkts 1568
    InCEPkts 108
[root@lab ~]#

Información de enrutamiento del núcleo

¿Tiene un problema de enrutamiento? o, ¿la conectividad no está funcionando como se esperaba debido a que la conexión está viajando a través de una ruta diferente?

Compruebe rápidamente la tabla de enrutamiento.

[root@lab ~]# netstat -r
Tabla de enrutamiento IP del núcleo
Destino Gateway Genmask Flags MSS Window irtt Iface
puerta de enlace predeterminada 0.0.0.0 UG 0 0 0 eth0
10.16.0.0 0.0.0 255.255.0.0 U 0 0 0 eth0
68.183.32.0 0.0.0 255.255.240.0 U 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth0
[root@lab ~]#

PID utilizado por el número de puerto

Muy útil para solucionar problemas de conflicto de puertos. Digamos que está intentando iniciar un servidor Apache o Nginx, que escucha en el puerto 80 pero no puede porque algún otro proceso ya está utilizando el puerto 80.

[root@lab ~]# netstat -anlp |grep 80 | grep LISTEN
tcp6 0 0 :::80 :::* LISTEN 3937/httpd          
[root@lab ~]#

Y, puede ver que el PID 3937 está utilizando ese puerto.

Si está utilizando AIX, entonces

netstat -Aan | grep $númerodepuerto

Esto mostrará la dirección del bloque de control de protocolo en hexadecimal

Una vez que tenga el hexadecimal, entonces puede ejecutar lo siguiente para obtener qué proceso está manteniendo un número de puerto.

rmsock $dirección_del_pcb tcpcb

Lista de interfaces de red

¿Tiene varias interfaces ethernet? o ¿no está seguro y quiere averiguarlo?

[root@lab ~]# netstat -i
Tabla de interfaces del núcleo
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 793026 0 0 0 849443 0 0 BMRU
lo 65536 6 0 0 0 6 0 0 LRU
[root@lab ~]#

Escucha continua

Una excelente opción cuando se trata de solucionar problemas relacionados con caídas de los servicios. Digamos que una aplicación se bloquea aleatoriamente cada pocos minutos. Pero, no está seguro de cuándo exactamente. Puede utilizar el argumento -c que mostrará continuamente los resultados.

[root@lab ~]# netstat -anlpc |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd         
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd         
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd         
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd

Cuando deje de actualizarse, sabrá que se ha bloqueado.

Conclusión

netstat es uno de los comandos más utilizados por los administradores de sistemas y espero que los ejemplos anteriores le den una idea de lo que puede hacer con él. Si está buscando aprender más sobre la administración de Linux, entonces eche un vistazo a este curso Udemy.