Cómo usar netstat en Linux

Un indicador de terminal en el escritorio de una computadora Linux.
Fatmawati Achmad Zaenuri / Shutterstock

El netstatcomando de Linux le brinda un tesoro de información sobre sus conexiones de red, los puertos que están en uso y los procesos que los utilizan. Aprenda como usarlo.

Puertos, procesos y protocolos

Los enchufes de red pueden estar conectados o esperando una conexión. Las conexiones utilizan protocolos de red como  el Protocolo de control de transporte (TCP) o el Protocolo de datagramas de usuario UDP. Utilizan direcciones de protocolo de Internet y puertos de red para establecer conexiones.

La palabra sockets   puede evocar imágenes de un punto de conexión física para un cable o cable, pero en este contexto, un socket es una construcción de software que se utiliza para manejar un extremo de una conexión de datos de red.

Los sockets tienen dos estados principales: están conectados y facilitan una comunicación de red en curso, o están esperando una conexión entrante para conectarse a ellos. Hay otros estados, como el estado en el que un conector está a medio camino del establecimiento de una conexión en un dispositivo remoto, pero dejando de lado los estados transitorios, puede pensar en un conector como conectado o en espera (lo que a menudo se denomina escucha ).

El socket de escucha se llama servidor y el socket que solicita una conexión con el socket de escucha se llama cliente . Estos nombres no tienen nada que ver con los roles de hardware o computadora. Simplemente definen la función de cada socket en cada extremo de la conexión.

El netstatcomando le permite descubrir qué sockets están conectados y qué sockets están escuchando. Es decir, le dice qué puertos están en uso y qué procesos los están usando. Puede mostrarle tablas de enrutamiento y estadísticas sobre sus interfaces de red y conexiones de multidifusión .

La funcionalidad de netstatse ha replicado a lo largo del tiempo en diferentes utilidades de Linux, como ip y ss . Todavía vale la pena conocer a este abuelo de todos los comandos de análisis de red, porque está disponible en todos los sistemas operativos Linux y similares a Unix, e incluso en Windows y Mac.

Aquí se explica cómo usarlo, con comandos de ejemplo.

Listado de todos los enchufes

La -aopción (todos) hace que se netstatmuestren todos los sockets conectados y en espera. Este comando puede producir una lista larga, por lo que lo canalizamos less.

netstat -a | Menos

netstat -a |  menos en una ventana de terminal

La lista incluye sockets TCP (IP), TCP6 (IPv6) y UDP.

Salida de netstat -a |  menos en una ventana de terminal

La envoltura en la ventana de la terminal hace que sea un poco difícil ver lo que está sucediendo. Aquí hay un par de secciones de esa lista:

Conexiones de Internet activas (servidores y establecidas)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado 
tcp 0 0 localhost: dominio 0.0.0.0:* ESCUCHAR 
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* ESCUCHAR 
tcp 0 0 localhost: ipp 0.0.0.0:* ESCUCHAR 
tcp 0 0 localhost: smtp 0.0.0.0:* ESCUCHAR 
tcp6 0 0 [::]: ssh [::]: * ESCUCHAR 
tcp6 0 0 ip6-localhost: ipp [::]: * ESCUCHAR 
.
.
.
Sockets de dominio UNIX activos (servidores y establecidos)
Proto RefCnt Flags Tipo Estado Ruta de nodo I
unix 24 [] DGRAM 12831 / run / systemd / journal / dev-log
UNIX 2 [ACC] ESCUCHA DE TRANSMISIÓN 24747 @ / tmp / dbus-zH6clYmvw8
unix 2 [] DGRAM 26372 / run / user / 1000 / systemd / notificar
unix 2 [] DGRAM 23382 / run / user / 121 / systemd / notificar
unix 2 [ACC] SEQPACKET LISTENING 12839 / run / udev / control

La sección «Internet activa» enumera las conexiones externas conectadas y los enchufes locales que escuchan solicitudes de conexión remota. Es decir, enumera las conexiones de red que están (o se establecerán) con dispositivos externos.

La sección «Dominio UNIX» enumera las conexiones internas conectadas y en escucha. En otras palabras, enumera las conexiones que se han establecido dentro de su computadora entre diferentes aplicaciones, procesos y elementos del sistema operativo.

Las columnas «Internet activa» son:

  • Proto: el protocolo utilizado por este socket (por ejemplo, TCP o UDP).
  • Recv-Q: la cola de recepción. Estos son bytes entrantes que se han recibido y se almacenan en búfer, esperando que el proceso local que está usando esta conexión los lea y consuma.
  • Send-Q:  la cola de envío. Esto muestra los bytes que están listos para ser enviados desde la cola de envío.
  • Dirección local: los detalles de la dirección del extremo local de la conexión. El valor predeterminado es para netstat mostrar el nombre de host local para la dirección y el nombre del servicio para el puerto.
  • Dirección extranjera:  la dirección y el número de puerto del extremo remoto de la conexión.
  • Estado: el estado del socket local. Para los sockets UDP, esto suele estar en blanco. Consulte la tabla de estados a continuación.
Relacionado:  Cómo usar el comando whois en Linux

Para las conexiones TCP, el valor de estado puede ser uno de los siguientes:

  • ESCUCHAR: Solo del lado del servidor. El socket está esperando una solicitud de conexión.
  • SYN-SENT: solo del lado del cliente. Este socket ha realizado una solicitud de conexión y está esperando a ver si será aceptada.
  • SYN-RECEIVED: solo del lado del servidor. Este conector está esperando una confirmación de conexión después de aceptar una solicitud de conexión.
  • ESTABLECIDO: Servidor y clientes. Se ha establecido una conexión de trabajo entre el servidor y el cliente, lo que permite transferir datos entre los dos.
  • FIN-WAIT-1: Servidor y clientes. Este conector está esperando una solicitud de terminación de conexión desde el conector remoto, o un acuse de recibo de una solicitud de terminación de conexión que se envió previamente desde este conector.
  • FIN-WAIT-2: Servidor y clientes. Este conector está esperando una solicitud de terminación de conexión del conector remoto.
  • CLOSE-WAIT: Servidor y cliente. Este conector está esperando una solicitud de terminación de la conexión del usuario local.
  • CIERRE: Servidor y clientes. Este conector está esperando una confirmación de solicitud de terminación de conexión desde el conector remoto.
  • LAST-ACK: Servidor y cliente. Este conector está esperando un acuse de recibo de la solicitud de terminación de la conexión que envió al conector remoto.
  • TIME-WAIT: Servidor y clientes. Este conector envió un acuse de recibo al conector remoto para hacerle saber que recibió la solicitud de terminación del conector remoto. Ahora está esperando para asegurarse de que se recibió el acuse de recibo.
  • CERRADO: No hay conexión, por lo que el enchufe ha sido terminado.

Las columnas de «dominio Unix» son:

  • Proto: el protocolo utilizado por este conector. Será «unix».
  • RefCnt: ​​Recuento de referencias. El número de procesos adjuntos conectados a este socket.
  • Indicadores: generalmente se establece en ACC , lo que representa SO_ACCEPTON, lo que significa que el socket está esperando una solicitud de conexión. SO_WAITDATA, mostrado como W, significa que hay datos esperando ser leídos. SO_NOSPACE, mostrado como N, significa que no hay espacio para escribir datos en el socket (es decir, el búfer de envío está lleno).
  • Tipo: el tipo de enchufe. Consulte la tabla de tipos a continuación.
  • Estado: el estado del socket. Consulte la tabla de estados a continuación.
  • I-Node: el inodo del sistema de archivos asociado con este socket.
  • Ruta : la ruta del sistema de archivos al socket.

El tipo de socket de dominio Unix puede ser uno de los siguientes:

  • DGRAM: El conector se está utilizando en modo datagrama, utilizando mensajes de longitud fija. No se garantiza que los datagramas sean fiables, secuenciados ni no duplicados.
  • STREAM: este conector es un conector de flujo. Este es el tipo de conexión de enchufe «normal» común. Estos sockets están diseñados para proporcionar una entrega secuenciada (en orden) confiable de paquetes.
  • RAW: este conector se utiliza como conector sin formato. Los sockets sin procesar operan en el nivel de red del modelo OSI  y no hacen referencia a los encabezados TCP y UDP desde el nivel de transporte.
  • RDM: este conector se encuentra en un extremo de una conexión de mensajes entregados de manera confiable.
  • SEQPACKET: este socket funciona como un socket de paquete secuencial, que es otro medio de proporcionar una entrega de paquetes confiable, secuenciada y no duplicada.
  • PAQUETE: Conector de acceso de interfaz sin formato. Los sockets de paquetes se utilizan para recibir o enviar paquetes sin procesar en el nivel del controlador de dispositivo (es decir, la capa de enlace de datos) del modelo OSI.

El estado del socket del dominio Unix puede ser uno de los siguientes:

  • GRATIS: este socket no está asignado.
  • ESCUCHANDO: Este socket está escuchando solicitudes de conexión entrantes.
  • CONECTANDO: Este enchufe está en proceso de conexión.
  • CONECTADO: Se ha establecido una conexión y el enchufe puede recibir y transmitir datos.
  • DESCONECTANDO: La conexión está en proceso de finalización.

¡Vaya, eso es mucha información! Muchas de las netstatopciones refinan los resultados de una forma u otra, pero no cambian demasiado el contenido. Vamos a ver.

Listado de enchufes por tipo

El netstat -acomando puede proporcionar más información de la que necesita ver. Si solo desea o necesita ver los sockets TCP, puede usar la -topción (TCP) para restringir la visualización y mostrar solo los sockets TCP.

netstat -at | Menos

netstat -at |  menos en una ventana de terminal

La visualización se reduce considerablemente. Los pocos sockets que se enumeran son todos TCP.

Salida de netstat -at |  menos en una ventana de terminal

Las opciones -u(UDP) y -x(UNIX) se comportan de manera similar, restringiendo los resultados al tipo de socket especificado en la línea de comando. Aquí está la opción -u (UDP) en uso:

netstat -au | Menos

netstat -au |  menos en una ventana de terminal

Solo se enumeran los sockets UDP.

Salida de netstat -au |  menos en una ventana de terminal

Listado de enchufes por estado

Para ver los sockets que están en estado de escucha o de espera, use la -lopción (escuchando).

netstat -l | Menos

netstat -l |  menos en una ventana de terminal

Los sockets que se enumeran son los que están en estado de escucha.

Relacionado:  Cómo trabajar con paquetes Snap en Linux

Salida de netstat -l |  menos en una ventana de terminal

Esto se puede combinar con las opciones -t (TCP, -u (UDP) y -x (UNIX) para profundizar en los sockets de interés. Busquemos sockets TCP de escucha:

netstat -lt | Menos

netstat -lt |  menos en una ventana de terminal

Ahora, solo vemos sockets de escucha de TCP.

salida de netstat -lt |  menos en una ventana de terminal

Estadísticas de red por protocolo

Para ver las estadísticas de un protocolo, use la -sopción (estadísticas) y pase las opciones -t(TCP), -u(UDP) o -x(UNIX). Si solo usa la -sopción (estadísticas) por sí sola, verá estadísticas para todos los protocolos. Revisemos las estadísticas del protocolo TCP.

netstat -st | Menos

netstat -st |  menos en una ventana de terminal

Se muestra una colección de estadísticas para las conexiones TCP en less.

Salida de netstat -st |  menos en una ventana de terminal

Mostrar nombres de procesos y PID

Puede ser útil ver el ID de proceso (PID) del proceso mediante un socket, junto con el nombre de ese proceso. La -popción (programa) hace precisamente eso. Veamos cuáles son los PID y los nombres de proceso para los procesos que utilizan un socket TCP que está en estado de escucha. Usamos sudopara asegurarnos de recibir toda la información disponible, incluida cualquier información que normalmente requeriría permisos de root.

sudo netstat -p -at

sudo netstat -p -at en una ventana de terminal

Aquí está ese resultado en una tabla formateada:

Conexiones de Internet activas (servidores y establecidas)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado PID / Nombre del programa 
tcp 0 0 localhost: dominio 0.0.0.0:* ESCUCHA 6927 / systemd-resolv 
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* ESCUCHAR 751 / sshd 
tcp 0 0 localhost: ipp 0.0.0.0:* ESCUCHA 7687 / cupsd 
tcp 0 0 localhost: smtp 0.0.0.0:* ESCUCHA 1176 / master 
tcp6 0 0 [::]: ssh [::]: * ESCUCHAR 751 / sshd 
tcp6 0 0 ip6-localhost: ipp [::]: * ESCUCHA 7687 / cupsd 
tcp6 0 0 ip6-localhost: smtp [::]: * ESCUCHA 1176 / master

Tenemos una columna adicional llamada «PID / nombre del programa». Esta columna enumera el PID y el nombre del proceso que utiliza cada uno de los sockets.

Listado de direcciones numéricas

Otro paso que podemos tomar para eliminar algunas ambigüedades es mostrar las direcciones locales y remotas como direcciones IP en lugar de sus dominios y nombres de host resueltos. Si usamos la  -nopción (numérica), las direcciones IPv4 se muestran en formato decimal con puntos:

sudo netstat -an | Menos

sudo netstat -an |  menos en una ventana de terminal

Las direcciones IP se muestran como valores numéricos. También se muestran los números de puerto, separados por dos puntos ” :” de la dirección IP.

Salida de sudo netstat -an |  menos en una ventana de terminal

Una dirección IP 127.0.0.1 muestra que el conector está vinculado a la dirección de bucle de retorno de la computadora local . Puede pensar en una dirección IP de 0.0.0.0 como la «ruta predeterminada» para direcciones locales y «cualquier dirección IP» para direcciones extranjeras. Las direcciones IPv6 que se muestran como “ ::” también son direcciones cero.

Los puertos que se enumeran se pueden verificar fácilmente para ver cuál es su propósito habitual :

  • 22:  Este es el puerto de escucha de Secure Shell (SSH).
  • 25: Este es el  puerto de escucha del Protocolo simple de transferencia de correo (SMTP).
  • 53: Este es el puerto de escucha del Sistema de nombres de dominio (DNS).
  • 68: Este es el  puerto de escucha del Protocolo de configuración dinámica de host (DHCP).
  • 631: Este es el puerto de escucha del Common UNIX Printing System (CUPS).

Visualización de la tabla de enrutamiento

La -ropción (ruta) muestra la tabla de enrutamiento del kernel.

sudo netstat -r

sudo netstat -r en una ventana de terminal

Aquí está ese resultado en una tabla ordenada:

Tabla de enrutamiento de IP del kernel
Pasarela de destino Genmask Flags MSS Window irtt Iface
Vigor.router predeterminado 0.0.0.0 UG 0 0 0 enp0s3
enlace-local 0.0.0.0 255.255.0.0 U 0 0 0 enp0s3
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3

Y esto es lo que significan las columnas:

  • Destino: la red de destino o el dispositivo host de destino (si el destino no es una red).
  • Puerta de enlace: la dirección de la puerta de enlace. *Aparece un asterisco “ ” aquí si no se establece una dirección de puerta de enlace.
  • Genmask: la máscara de subred de la ruta.
  • Banderas: consulte la tabla de banderas a continuación.
  • MSS: Tamaño de segmento máximo predeterminado para conexiones TCP a través de esta ruta; esta es la mayor cantidad de datos que se pueden recibir en un segmento TCP.
  • Ventana: el tamaño de ventana predeterminado para las conexiones TCP a través de esta ruta, que indica la cantidad de paquetes que se pueden transferir y recibir antes de que se llene el búfer de recepción. En la práctica, los paquetes son consumidos por la aplicación receptora.
  • irtt: El tiempo de ida y vuelta inicial . El kernel hace referencia a este valor para realizar ajustes dinámicos en los parámetros de TCP para conexiones remotas que tardan en responder.
  • Iface: La interfaz de red desde la que se transmiten los paquetes enviados por esta ruta.

El valor de las banderas puede ser uno de los siguientes:

  • U: La ruta está arriba.
  • H: El destino es un anfitrión y el único destino posible en esta ruta.
  • G: Usa la puerta de enlace.
  • R: Restablezca la ruta para el enrutamiento dinámico.
  • D: instalado dinámicamente por el demonio de enrutamiento.
  • M: Modificado por el demonio de enrutamiento cuando recibió un paquete del Protocolo de mensajes de control de Internet (ICMP).
  • R: Instalado por addrconfel generador automático de archivos de configuración de DNS y DHCP.
  • C: entrada de caché.
  • !: Ruta de rechazo.
Relacionado:  Cómo utilizar todos los comandos de búsqueda de Linux

Encontrar el puerto utilizado por un proceso

Si canalizamos la salida de netstatthrough grep, podemos buscar un proceso por nombre e identificar el puerto que está usando. Usamos las opciones -a(todas), -n(numéricas) y -p(programa) utilizadas anteriormente, y buscamos «sshd».

sudo netstat -anp | grep "sshd"

sudo netstat -anp |  grep "sshd" en una ventana de terminal

grepencuentra la cadena de destino, y vemos que el sshddemonio está usando el puerto 22.

Por supuesto, también podemos hacer esto a la inversa. Si buscamos “: 22”, podemos averiguar qué proceso está usando ese puerto, si lo hay.

sudo netstat -anp | grep ": 22"

sudo netstat -anp |  grep ": 22" en una ventana de terminal

Esta vez grepencuentra la cadena de destino “: 22” y vemos que el proceso que usa este puerto es el sshddemonio, ID de proceso 751.

Enumere las interfaces de red

La -iopción (interfaces) mostrará una tabla de las interfaces de red que netstatpueden descubrir.

sudo netstat -i

Tabla de interfaz de kernel en una ventana de terminal

Aquí está la salida de una manera más legible:

Tabla de interfaz de kernel
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
enp0s3 1500 4520671 0 0 0 4779773 0 0 0 BMRU
lo 65536 30175 0 0 0 30175 0 0 0 LRU

Esto es lo que significan las columnas:

  • Iface: el nombre de la interfaz. La enp0s3 interfaz es la interfaz de red para el mundo exterior y la lointerfaz es la interfaz de bucle invertido. La interfaz de bucle invertido permite que los procesos se comuniquen entre sí dentro de la computadora mediante protocolos de red, incluso si la computadora no está conectada a una red.
  • MTU: La unidad de transmisión máxima (MTU). Este es el «paquete» más grande que se puede enviar. Consiste en un encabezado que contiene indicadores de enrutamiento y protocolo, y otros metadatos, además de los datos que realmente se transportan.
  • RX-OK: la cantidad de paquetes recibidos, sin errores.
  • RX-ERR: el número de paquetes recibidos, con errores. Queremos que esto sea lo más bajo posible.
  • RX-DRP: el número de paquetes descartados (es decir, perdidos). También queremos que sea lo más bajo posible.
  • RX-OVR: Número de paquetes perdidos debido a desbordamientos al recibir. Esto generalmente significa que el búfer de recepción estaba lleno y no podía aceptar más datos, pero se recibieron más datos y tuvieron que descartarse. Cuanto menor sea esta cifra, mejor, y cero es perfecto.
  • TX-OK: el número de paquetes transmitidos, sin errores.
  • RX-ERR: el número de paquetes transmitidos, con errores. Queremos que esto sea cero.
  • RX-DRP: el número de paquetes descartados durante la transmisión. Idealmente, esto debería ser cero.
  • RX-OVR: el número de paquetes perdidos debido a desbordamientos durante la transmisión. Esto generalmente significa que el búfer de envío estaba lleno y no podía aceptar más datos, pero más datos estaban listos para ser transmitidos y debían descartarse.
  • Flg: Banderas. Consulte la tabla de banderas a continuación.

Las banderas representan lo siguiente:

  • B: Se está utilizando una dirección de transmisión.
  • L: Esta interfaz es un dispositivo de bucle invertido.
  • M: Se están recibiendo todos los paquetes (es decir, en modo promiscuo). Nada se filtra ni se descarta.
  • O: El Protocolo de resolución de direcciones (ARP) está desactivado para esta interfaz.
  • P: Esta es una conexión de punto a punto (PPP).
  • R: La interfaz se está ejecutando.
  • U: La interfaz está activa.

Lista de pertenencias a grupos de multidifusión

En pocas palabras, una transmisión de multidifusión permite que un paquete se envíe una sola vez, independientemente del número de destinatarios. Para servicios como la transmisión de video, por ejemplo, esto aumenta enormemente la eficiencia desde el punto de vista del remitente.

La -gopción (grupos) hace una netstatlista de los miembros del grupo de multidifusión de los sockets en cada interfaz.

sudo netstat -g

sudo netstat -g en una ventana de terminal

Las columnas son bastante simples:

  • Interfaz: el nombre de la interfaz por la que transmite el conector.
  • RefCnt: el recuento de referencias, que es el número de procesos adjuntos al socket.
  • Grupo: el nombre o identificador del grupo de multidifusión.

Los nuevos chicos de la cuadra

Los comandos route , ip , ifconfig y ss pueden proporcionar mucho de lo que netstates capaz de mostrarle. Todos son excelentes comandos y vale la pena revisarlos.

Nos hemos centrado en netstatporque está disponible universalmente, independientemente del sistema operativo tipo Unix en el que esté trabajando, incluso los más oscuros.