GNU/Linux >> Tutoriales Linux >  >> Linux

10 ejemplos básicos del comando Linux Netstat

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


Linux
  1. Comando netstat de Linux

  2. UNIX/Linux:10 ejemplos de comandos de Netstat

  3. 7 ejemplos de comandos Linux df

  4. Ejemplos de comandos básicos "chmod" en Linux

  5. Ejemplos de comandos rm en Linux

Comando wc Linux con ejemplos

Comando Netstat en Linux - 28 comandos con ejemplos

10 ejemplos del comando ss de Linux para monitorear conexiones de red

Ejemplos de comandos id en Linux

Ejemplos de comandos df en Linux

Ejemplos de comandos du en Linux