- Dave McKay
@TheGurkha
- February 17, 2020, 8:00am EDT
el comando linux netstat
le da un tesoro de información sobre sus conexiones de red, los puertos que están en uso y los procesos que los usan. Aprende a usarlo.
los puertos, procesos y protocolos
los sockets de red pueden conectarse o esperar 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 podría evocar imágenes de un punto de conexión físico para un cable o cable, pero en este contexto, un socket es una construcción de software utilizada 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 continua, o están esperando una conexión entrante para conectarse a ellos. Hay otros estados, como el estado cuando un socket está a medio camino de establecer una conexión en un dispositivo remoto, pero dejando a un lado los Estados transitorios, puede pensar en un socket como si estuviera conectado o esperando (lo que a menudo se llama escuchar).
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 el papel de cada socket en cada extremo de la conexión.
el comando netstat
le permite descubrir qué sockets están conectados y qué sockets están escuchando. Es decir, te 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 con el tiempo en diferentes utilidades de Linux, como ip y ss., Todavía vale la pena conocer este abuelo de todos los comandos de análisis de red, porque está disponible en todos los sistemas operativos Linux y Unix, e incluso en Windows y Mac.
He aquí cómo usarlo, completo con comandos de ejemplo.
listando todos los Sockets
la opción -a
(all) hace que netstat
muestre todos los sockets conectados y en espera. Este comando puede producir un listado largo, por lo que lo canalizamos a less
.,
netstat -a | less
el listado incluye sockets TCP (IP), TCP6 (IPv6) y UDP.
el wrap-around en la ventana del terminal hace que sea un poco difícil ver lo que está pasando. Aquí hay un par de secciones de ese listado:
la sección «Internet activo» enumera las conexiones externas conectadas y los sockets locales que escuchan solicitudes de conexión remota. Es decir, enumera las conexiones de red que se establecen (o se establecerán) a dispositivos externos.,
la sección «dominio UNIX» enumera las conexiones internas conectadas y de 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 activo» 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á utilizando 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 que
netstat
muestre el nombre de host local para la dirección y el nombre del servicio para el puerto. - Foreign address: la dirección y el número de Puerto del extremo remoto de la conexión.
- State: el estado del socket local. Para sockets UDP, esto suele estar en blanco. Véase la tabla de Estados, a continuación.,
para conexiones TCP, el valor de estado puede ser uno de los siguientes:
- LISTEN: Server-side only. 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 socket está esperando un reconocimiento 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 la transferencia de datos entre los dos.,
- FIN-WAIT-1: Servidor y clientes. Este socket está esperando una solicitud de terminación de conexión desde el socket remoto, o un acuse de recibo de una solicitud de terminación de conexión que se envió previamente desde este socket.
- FIN-WAIT-2: Servidor y clientes. Este socket está esperando una solicitud de terminación de conexión desde el socket remoto.
- CLOSE-WAIT: servidor y cliente. Este socket está esperando una solicitud de terminación de conexión del usuario local.
- cierre: servidor y clientes., Este socket está esperando un acuse de recibo de la solicitud de terminación de conexión desde el socket remoto.
- LAST-ACK: servidor y cliente. Este socket está esperando un acuse de recibo de la solicitud de terminación de conexión que envió al socket remoto.
- TIME-WAIT: servidor y clientes. Este socket envió un acuse de recibo al socket remoto para hacerle saber que recibió la solicitud de terminación del socket remoto. Ahora está esperando para asegurarse de que se recibió el acuse de recibo.
- cerrado: no hay conexión, por lo que el socket ha sido terminado.,
Las columnas «Unix domain» son:
- Proto: el protocolo utilizado por este socket. Será » unix.»
- RefCnt: Reference count. El número de procesos conectados conectados a este socket.
- Flags: normalmente se establece en
ACC
, 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). - Type: el tipo de socket. Vea la tabla de tipos a continuación.
- State: el estado del socket. Vea la tabla de Estados a continuación.
- I-Node: el inodo del sistema de archivos asociado a este socket.
- Path: la ruta del sistema de archivos al socket.
el tipo de socket de dominio Unix puede ser uno de los siguientes:
- DGRAM: el socket se utiliza en modo datagrama, utilizando mensajes de longitud fija., No se garantiza que los datagramas sean confiables, secuenciados o no duplicados.
- STREAM: este socket es un socket stream. Este es el tipo común «normal» de conexión de socket. Estos sockets están diseñados para proporcionar una entrega secuenciada (en orden) fiable de paquetes.
- RAW: este socket se utiliza como un socket raw. Los sockets Raw funcionan a nivel de red del modelo OSI y no hacen referencia a los encabezados TCP y UDP desde el nivel de transporte.
- RDM: este socket se encuentra en un extremo de una conexión de mensajes entregada de forma fiable.,
- 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: socket de acceso de interfaz Raw. Los sockets de paquetes se utilizan para recibir o enviar paquetes sin procesar al nivel del controlador de dispositivo (es decir, capa de enlace de datos) del modelo OSI.
el estado del socket del dominio Unix puede ser uno de los siguientes:
- libre: este socket no está asignado.
- LISTENING: este socket está escuchando las solicitudes de conexión entrantes.,
- conexión: este socket está en proceso de conexión.
- conectado: se ha establecido una conexión, y el socket es capaz de recibir y transmitir datos.
- desconectar: la conexión está en proceso de ser terminada.
Wow, eso es mucha información! Muchas de las opciones netstat
refinan los resultados de una forma u otra, pero no cambian demasiado el contenido. Echemos un vistazo.,
listar Sockets por tipo
el comando netstat -a
puede proporcionar más información de la que necesita ver. Si solo desea o necesita ver los sockets TCP, puede usar la opción -t
(TCP) para restringir la visualización para mostrar solo sockets TCP.
netstat -at | less
La pantalla se reduce considerablemente. Los pocos sockets que se enumeran son todos sockets 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 comandos. Aquí está la opción-u (UDP) en uso:
netstat -au | less
solo se enumeran los sockets UDP.
Listing Sockets by State
para ver los sockets que están en estado de escucha o espera, utilice la opción -l
(escuchar).
netstat -l | less
los sockets que se enumeran son aquellos 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. Vamos a buscar sockets TCP de escucha:
netstat -lt | less
ahora, solo vemos sockets TCP de escucha.
estadísticas de red por protocolo
netstat -st | less
una colección de estadísticas para las conexiones TCP se muestra enless
.
mostrando nombres de proceso y PIDs
puede ser útil ver el ID de proceso (PID) del proceso usando un socket, junto con el nombre de ese proceso., La opción -p
(programa) hace precisamente eso. Veamos cuáles son los PIDs y los nombres de proceso para los procesos que usan un socket TCP que está en estado de escucha. Usamos sudo
para asegurarnos de recibir toda la información que está disponible, incluida cualquier información que normalmente requeriría permisos de root.
sudo netstat -p -at
Aquí está esa salida en una tabla formateada:
tenemos una columna extra llamada «PID / nombre del programa.»Esta columna enumera el PID y el nombre del proceso usando cada uno de los sockets.,
listado de direcciones numéricas
otro paso que podemos tomar para eliminar cierta ambigüedad es mostrar las direcciones locales y remotas como direcciones IP en lugar de sus nombres de dominio y host resueltos. Si utilizamos la opción -n
(numérico), las direcciones IPv4 se muestran en formato decimal punteado:
sudo netstat -an | less
las direcciones IP se muestran como valores numéricos. Los números de puerto también se muestran, separados por dos puntos » :
» de la dirección IP.
una dirección IP de 127.0.0.,1 muestra que el socket está enlazado a la dirección de bucle invertido del equipo local. Puede pensar en una dirección IP de 0.0.0.0 como la » ruta predeterminada «para las direcciones locales, y» cualquier dirección IP » para las direcciones extranjeras. Las direcciones IPv6 mostradas como «::
» también son todas direcciones cero.
los puertos que se enumeran se pueden comprobar fácilmente para ver cuál es su propósito habitual:
- 22: Este es el puerto de escucha Secure Shell (SSH).
- 25: Este es el puerto de escucha del Protocolo de transferencia de correo simple (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 sistema de impresión UNIX común (CUPS).
relacionado: ¿Cuál es la diferencia entre 127.0.0.1 y 0.0.0.0?
mostrando la tabla de enrutamiento
la opción-r
(route) muestra la tabla de enrutamiento del núcleo.,
sudo netstat -r
Aquí está la salida en una tabla ordenada:
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default Vigor.router 0.0.0.0 UG 0 0 0 enp0s3 link-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).
- Gateway: la dirección de la puerta de enlace. Un asterisco «
*
» aparece aquí si no se establece una dirección de puerta de enlace. - Genmask: La máscara de subred para la ruta.
- banderas: ver la tabla banderas, a continuación.,
- MSS: Tamaño de segmento máximo predeterminado para las conexiones TCP sobre esta ruta: Esta es la mayor cantidad de datos que se pueden recibir en un segmento TCP.
- Window: el tamaño de ventana predeterminado para las conexiones TCP sobre esta ruta, que indica el número de paquetes que se pueden transferir y recibir antes de que el búfer de recepción se llene. En la práctica, los paquetes son consumidos por la aplicación receptora.
- irtt: el tiempo inicial de ida y vuelta. Este valor es referenciado por el kernel para hacer ajustes dinámicos a los parámetros TCP para conexiones remotas que son lentas para responder.,
- Iface: la interfaz de red desde la que se transmiten los paquetes enviados a través de esta ruta.
el valor de las banderas puede ser uno de:
- U: la ruta está lista.
- H: Target es un host y el único destino posible en esta ruta.
- G: utilice la puerta de enlace.
- R: restablece la ruta para enrutamiento dinámico.
- D: instalado dinámicamente por el demonio de enrutamiento.
- M: modificado por el demonio de enrutamiento cuando recibió un paquete de protocolo de mensajes de control de Internet (ICMP).,
- A: instalado por
addrconf
, el generador de archivos de configuración DNS y DHCP automatizado. - C: Entrada de caché.
- !: Rechazar ruta.
encontrar el puerto utilizado por un proceso
Si canalizamos la salida de netstat
a través de grep
, podemos buscar un proceso por nombre e identificar el puerto que está utilizando. Usamos las opciones -a
(all), -n
(numérica) y -p
(programa) usadas anteriormente, y buscamos «sshd.,»
sudo netstat -anp | grep "sshd"
grep
encuentra la cadena de destino, y vemos que el sshd
demonio está utilizando 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 demonio sshd
, process ID 751.,
enumere las Interfaces de red
la opción -i
(interfaces) mostrará una tabla de las interfaces de red que netstat
puede descubrir.
sudo netstat -i
Aquí está la salida de una manera más legible:
Kernel Interface table 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 interfaz
enp0s3
es la interfaz de red al mundo exterior, y la interfazlo
es la interfaz de bucle invertido., La interfaz loopback permite a los procesos intercomunicarse dentro del equipo utilizando protocolos de red, incluso si el equipo no está conectado 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 están transportando.
- RX-OK: El número 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 perdidos (es decir, perdidos). También queremos que esto 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 ser descartados. 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 lanzados al transmitir. Idealmente, esto debería ser cero.
- RX-OVR: el número de paquetes perdidos debido a desbordamientos al transmitir. 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 tuvieron que ser descartados.
- Flg: Banderas. Vea la tabla de Banderas a continuación.
las banderas representan lo siguiente:
list multicast Group Memberships
en pocas palabras, una transmisión multicast permite que un paquete se envíe solo una vez, independientemente del número de destinatarios., Para servicios como la transmisión de video, por ejemplo, esto aumenta la eficiencia desde el punto de vista del remitente en una cantidad tremenda.
la opción -g
(groups) hace que netstat
enumere la pertenencia al grupo multicast de sockets en cada interfaz.
sudo netstat -g
Las columnas son bastante simples:
- Interfaz: el nombre de la interfaz sobre la que el socket está transmitiendo.
- RefCnt: el recuento de referencia, que es el número de procesos conectados al socket.,
- Group: el nombre o identificador del grupo multicast.
los nuevos niños en el bloque
los comandos route, ip, ifconfig y ss pueden proporcionar mucho de lo que netstat
es capaz de mostrarle. Todos son buenos comandos y vale la pena comprobarlos.
Nos hemos centrado en netstat
porque está universalmente disponible, independientemente del sistema operativo tipo Unix en el que esté trabajando, incluso los más oscuros.,
Dave McKay usó computadoras por primera vez cuando la cinta de papel perforado estaba de moda, y ha estado programando desde entonces. Después de más de 30 años en la industria de ti, ahora es un periodista tecnológico a tiempo completo. Durante su carrera, ha trabajado como programador freelance, gerente de un equipo internacional de desarrollo de software, gerente de proyectos de servicios de ti y, más recientemente, como oficial de protección de datos. Dave es un evangelista de Linux y defensor del código abierto.Leer la Biografía Completa «