Netstat
Netstat es una utilidad de línea de comandos que se puede utilizar para enumerar todas las conexiones de red (socket) en un sistema. Enumera todas las conexiones de socket tcp, udp y las conexiones de socket unix.
Además de los enchufes conectados, también puede enumerar los enchufes de escucha que están esperando conexiones entrantes. Entonces, al verificar un puerto 80 abierto, puede confirmar si un servidor web se está ejecutando en el sistema o no.
Esto lo convierte en una herramienta muy útil para los administradores de redes y sistemas.
En este tutorial, veremos algunos ejemplos de cómo usar netstat para encontrar información sobre conexiones de red y puertos abiertos en un sistema.
Aquí hay una introducción rápida a netstat de las páginas man
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
1. Listar todas las conexiones
El primer y más simple comando es enumerar todas las conexiones actuales. Simplemente ejecute el comando netstat con la opción a.
$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED tcp 0 0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN udp 0 0 enlightened:domain *:* udp 0 0 *:bootpc *:* udp 0 0 enlightened.local:ntp *:* udp 0 0 localhost:ntp *:* udp 0 0 *:ntp *:* udp 0 0 *:58570 *:* udp 0 0 *:mdns *:* udp 0 0 *:49459 *:* udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* udp6 0 0 ip6-localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:* udp6 0 0 [::]:mdns [::]:* udp6 0 0 [::]:63811 [::]:* udp6 0 0 [::]:54952 [::]:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 12403 @/tmp/dbus-IDgfj3UGXX unix 2 [ ACC ] STREAM LISTENING 40202 @/dbus-vfs-daemon/socket-6nUC6CCx
El comando anterior muestra todas las conexiones de diferentes protocolos como tcp, udp y unix sockets. Sin embargo, esto no es muy útil. Los administradores a menudo quieren elegir conexiones específicas basadas en protocolos o números de puerto, por ejemplo.
2. Listar solo conexiones TCP o UDP
Para enumerar solo las conexiones tcp, use las opciones t.
$ netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:36310 del01s07-in-f24.1:https ESTABLISHED tcp 0 0 enlightened.local:45038 a96-17-181-10.depl:http ESTABLISHED tcp 0 0 enlightened.local:37892 ABTS-North-Static-:http ESTABLISHED .....
De manera similar, para enumerar solo las conexiones udp, use la opción u.
$ netstat -au Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 *:34660 *:* udp 0 0 enlightened:domain *:* udp 0 0 *:bootpc *:* udp 0 0 enlightened.local:ntp *:* udp 0 0 localhost:ntp *:* udp 0 0 *:ntp *:* udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* udp6 0 0 ip6-localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:*
El resultado anterior muestra conexiones ipv4 e ipv6.
3. Deshabilite la búsqueda inversa de dns para una salida más rápida
De forma predeterminada, el comando netstat intenta averiguar el nombre de host de cada dirección IP en la conexión mediante una búsqueda inversa de dns. Esto ralentiza la salida. Si no necesita saber el nombre de host y solo la dirección IP es suficiente, suprima la búsqueda de nombre de host con la opción n.
$ netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 192.168.1.2:49058 173.255.230.5:80 ESTABLISHED tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED tcp6 0 0 ::1:631 :::* LISTEN
El comando anterior muestra TODAS las conexiones TCP sin resolución dns. Entiendo ? Bien.
4. Verificar conexiones de escucha - Abrir puertos
Cualquier demonio/servicio de red mantiene un puerto abierto para escuchar las conexiones entrantes. Estos también son como conexiones de enchufe y están listados por netstat. Para ver solo los puertos de escucha, use la opción "-l".
$ netstat -tnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp6 0 0 ::1:631 :::* LISTEN
Ahora podemos ver solo escuchar puertos/conexiones tcp. Si desea ver todos los puertos de escucha, elimine la opción t. Si desea ver solo los puertos udp de escucha, use la opción "-u" en lugar de "-t".
Asegúrese de eliminar la opción "-a", de lo contrario, se enumerarían todas las conexiones y no solo las conexiones de escucha.
Si está ejecutando un servicio como http o smtp en su servidor Linux, puede usar el comando anterior para verificar si el servicio está escuchando conexiones entrantes o no.
5. Obtenga el nombre/pid del proceso y la identificación del usuario
Al ver los puertos y conexiones abiertos/de escucha, a menudo es útil conocer el nombre/pid del proceso que ha abierto ese puerto o conexión.
Por ejemplo, el servidor Apache httpd abre el puerto 80. Entonces, si desea verificar si algún servidor http se está ejecutando o no, o qué servidor http se está ejecutando, apache o nginx, busque el nombre del proceso.
Los detalles del proceso están disponibles mediante la opción 'p'.
~$ sudo netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1144/dnsmasq tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 661/cupsd tcp6 0 0 ::1:631 :::* LISTEN 661/cupsd
Al usar la opción p, netstat debe ejecutarse con privilegios de raíz; de lo contrario, no puede detectar los pid de los procesos que se ejecutan con privilegios de raíz y la mayoría de los servicios como http y ftp a menudo se ejecutan con privilegios de raíz.
Junto con el nombre/pid del proceso, es aún más útil obtener el nombre de usuario/uid que posee ese proceso en particular. Use la opción e junto con la opción p para obtener también el nombre de usuario.
$ sudo netstat -ltpe Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 enlightened:domain *:* LISTEN root 11090 1144/dnsmasq tcp 0 0 localhost:ipp *:* LISTEN root 9755 661/cupsd tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN root 9754 661/cupsd
El ejemplo anterior enumera las conexiones de escucha de tipo Tcp con información del proceso e información extendida.
La información extendida contiene el nombre de usuario y el inodo del proceso. Este es un comando útil para los administradores de red.
Nota - Si usa la opción n con la opción e, se listará el uid y no el nombre de usuario.
6. Imprimir estadísticas
El comando netstat también puede imprimir estadísticas de la red, como el número total de paquetes recibidos y transmitidos por tipo de protocolo, etc.
Para enumerar las estadísticas de todos los tipos de paquetes
$ netstat -s Ip: 32797 total packets received 0 forwarded 0 incoming packets discarded 32795 incoming packets delivered 29115 requests sent out 60 outgoing packets dropped Icmp: 125 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 125 125 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 125 ... OUTPUT TRUNCATED ...
Para imprimir estadísticas de solo protocolos seleccionados como TCP o UDP, use las opciones correspondientes como t y u junto con la opción s. ¡Simple!
7. Mostrar información de enrutamiento del kernel
La información de enrutamiento del núcleo se puede imprimir con la opción r. Es el mismo resultado dado por el comando de ruta. También usamos la opción n para deshabilitar la búsqueda de nombre de host.
$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
8. Imprimir interfaces de red
El comando netstat también puede imprimir la información sobre las interfaces de red. La opción "-i" hace la tarea.
$ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 31611 0 0 0 27503 0 0 0 BMRU lo 65536 0 2913 0 0 0 2913 0 0 0 LRU
El resultado anterior contiene información en un formato muy crudo. Para obtener una versión más humana de la salida, use la opción e junto con i.
$ netstat -ie Kernel Interface table eth0 Link encap:Ethernet HWaddr 00:16:36:f8:b2:64 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::216:36ff:fef8:b264/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:31682 errors:0 dropped:0 overruns:0 frame:0 TX packets:27573 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:29637117 (29.6 MB) TX bytes:4590583 (4.5 MB) Interrupt:18 Memory:da000000-da020000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:2921 errors:0 dropped:0 overruns:0 frame:0 TX packets:2921 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:305297 (305.2 KB) TX bytes:305297 (305.2 KB)
El resultado anterior es similar al resultado que muestra el comando ifconfig.
9. Obtener la salida de netstat continuamente
Netstat puede generar información de conexión de forma continua con la opción c.
$ netstat -ct
El comando anterior generará conexiones tcp continuamente.
10. Mostrar información del grupo de multidifusión
La opción g mostrará la información del grupo de multidifusión para los protocolos IPv4 e IPv6.
$ netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 all-systems.mcast.net eth0 1 224.0.0.251 eth0 1 all-systems.mcast.net lo 1 ip6-allnodes lo 1 ff01::1 eth0 1 ff02::fb eth0 1 ff02::1:fff8:b264 eth0 1 ip6-allnodes eth0 1 ff01::1 wlan0 1 ip6-allnodes wlan0 1 ff01::1
Más ejemplos del comando netstat
Bien, cubrimos los ejemplos básicos del comando netstat arriba. Ahora es el momento de hacer cosas geek con estilo.
Imprimir conexiones activas
Las conexiones de socket activas están en estado "ESTABLECIDO". Entonces, para obtener todas las conexiones activas actuales, use netstat con grep de la siguiente manera
$ netstat -atnp | grep ESTA (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 192.168.1.2:49156 173.255.230.5:80 ESTABLISHED 1691/chrome tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED 1691/chrome
Para ver una lista continua de conexiones activas, use el comando watch junto con netstat y grep
$ watch -d -n0 "netstat -atnp | grep ESTA"
Comprobar si un servicio se está ejecutando
Si desea verificar si un servidor como http, smtp o ntp se está ejecutando o no, use grep nuevamente.
$ sudo netstat -aple | grep ntp udp 0 0 enlightened.local:ntp *:* root 17430 1789/ntpd udp 0 0 localhost:ntp *:* root 17429 1789/ntpd udp 0 0 *:ntp *:* root 17422 1789/ntpd udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* root 17432 1789/ntpd udp6 0 0 ip6-localhost:ntp [::]:* root 17431 1789/ntpd udp6 0 0 [::]:ntp [::]:* root 17423 1789/ntpd unix 2 [ ] DGRAM 17418 1789/ntpd
Entonces encontramos que el servidor ntp se está ejecutando. Grep para http o smtp o lo que estés buscando.
Conclusión
Bueno, eso era para lo que se usa netstat. Si está buscando información más avanzada o desea profundizar, lea el manual de netstat (man netstat).
Y deje sus comentarios y sugerencias en el cuadro de comentarios a continuación.
Recursos
Consulte la página del manual de Linux para netstat para obtener más información.
https://linux.die.net/man/8/netstat
https://man7.org/linux/man-pages/man8/netstat.8.html