Tabla de contenidos
El netstat
comando 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 netstat
comando 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 netstat
se 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 -a
opción (todos) hace que se netstat
muestren todos los sockets conectados y en espera. Este comando puede producir una lista larga, por lo que lo canalizamos less
.
netstat -a | Menos
La lista incluye sockets TCP (IP), TCP6 (IPv6) y UDP.
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.
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 representaSO_ACCEPTON
, lo que significa que el socket está esperando una solicitud de conexión.SO_WAITDATA
, mostrado comoW
, significa que hay datos esperando ser leídos.SO_NOSPACE
, mostrado comoN
, 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 netstat
opciones refinan los resultados de una forma u otra, pero no cambian demasiado el contenido. Vamos a ver.
Listado de enchufes por tipo
El netstat -a
comando puede proporcionar más información de la que necesita ver. Si solo desea o necesita ver los sockets TCP, puede usar la -t
opción (TCP) para restringir la visualización y mostrar solo los sockets TCP.
netstat -at | Menos
La visualización se reduce considerablemente. Los pocos sockets que se enumeran son todos TCP.
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
Solo se enumeran los sockets UDP.
Listado de enchufes por estado
Para ver los sockets que están en estado de escucha o de espera, use la -l
opción (escuchando).
netstat -l | Menos
Los sockets que se enumeran son los que están en estado de escucha.
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
Ahora, solo vemos sockets de escucha de TCP.
Estadísticas de red por protocolo
Para ver las estadísticas de un protocolo, use la -s
opción (estadísticas) y pase las opciones -t
(TCP), -u
(UDP) o -x
(UNIX). Si solo usa la -s
opción (estadísticas) por sí sola, verá estadísticas para todos los protocolos. Revisemos las estadísticas del protocolo TCP.
netstat -st | Menos
Se muestra una colección de estadísticas para las conexiones TCP en less
.
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 -p
opció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 sudo
para asegurarnos de recibir toda la información disponible, incluida cualquier información que normalmente requeriría permisos de root.
sudo netstat -p -at
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 -n
opción (numérica), las direcciones IPv4 se muestran en formato decimal con puntos:
sudo netstat -an | Menos
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.
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 -r
opción (ruta) muestra la tabla de enrutamiento del kernel.
sudo netstat -r
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
addrconf
el generador automático de archivos de configuración de DNS y DHCP. - C: entrada de caché.
- !: Ruta de rechazo.
Encontrar el puerto utilizado por un proceso
Si canalizamos la salida de netstat
through 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"
grep
encuentra la cadena de destino, y vemos que el sshd
demonio 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"
Esta vez grep
encuentra la cadena de destino “: 22” y vemos que el proceso que usa este puerto es el sshd
demonio, ID de proceso 751.
Enumere las interfaces de red
La -i
opción (interfaces) mostrará una tabla de las interfaces de red que netstat
pueden descubrir.
sudo netstat -i
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 lalo
interfaz 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 -g
opción (grupos) hace una netstat
lista de los miembros del grupo de multidifusión de los sockets en cada interfaz.
sudo netstat -g
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 netstat
es capaz de mostrarle. Todos son excelentes comandos y vale la pena revisarlos.
Nos hemos centrado en netstat
porque está disponible universalmente, independientemente del sistema operativo tipo Unix en el que esté trabajando, incluso los más oscuros.