5.9. El comando netstat

netstat es una herramienta útil para comprobar la configuración y actividad de su red. Se llama netstat, aunque se trata en realidad de una colección de herramientas combinadas. Describiremos cada una de las funciones en las secciones siguientes.

5.9.1. Consulta de la tabla de encaminamiento

Si ejecuta netstat usando el indicador –r, puede ver la información de la tabla de encaminamiento del núcleo igual que hemos venido haciendo hasta ahora con route. Para vstout, tendríamos:
    # netstat -nr
    Kernel IP routing table
    Destination   Gateway      Genmask         Flags  MSS Window  irtt Iface
    127.0.0.1     *            255.255.255.255 UH       0 0          0 lo
    172.16.1.0    *            255.255.255.0   U        0 0          0 eth0
    172.16.2.0    172.16.1.1   255.255.255.0   UG       0 0          0 eth0

La opción -n hace que netstat imprima las direcciones IP en notación de cuaterna en vez de usar los nombres simbólicos de las máquinas o las redes. Esto es especialmente útil si pretende evitar consultas para esos nombres a través de la red (por ejemplo consultas a un servidor DNS o NIS).

La segunda columna de la salida producida por netstat informa sobre las pasarelas a las que apunta la información de encaminamiento. Si una ruta no usa pasarela, el programa imprime un asterisco. La tercera columna imprime el nivel de “generalización” de una ruta. Dada una dirección IP para la que encontrar una ruta apropiada, el núcleo recorre la tabla registro a registro haciendo un "Y" lógico de la dirección y la mascara de nivel de generalización antes de compararla con el destino que muestra dicho registro.

La cuarta columna muestra varios indicadores que describen la ruta:

G

La ruta utiliza una pasarela.

U

La interface esta activa.

H

Esta interface permite el acceso a una sola máquina. Este es el caso de la interface de lazo 127.0.0.1.

D

Esta ruta es creada dinámicamente. Aparece si la entrada de la tabla ha sido generada por un demonio de encaminamiento como gated o por un mensaje de redirección ICMP (ver la sección Sección 2.5” en el capítulo 2).

M

Presente cuando este registro ha sido modificado por un mensaje de redirección ICMP.

!

La ruta es una ruta de rechazo, y los datagramas serán descartados.

Las siguientes tres columnas muestran el MSS, tamaño de ventana y irtt que serán aplicados a las conexiones TCP establecidas a través de esta ruta. El MSS es el Tamaño Máximo de Segmento, y es el tamaño del datagrama más grande que construirá el núcleo para transmitir a través de esta ruta. La Ventana es la cantidad máxima de datos que el sistema aceptará de una sola vez desde una máquina remota. El acrónimo irtt significa “tiempo inicial de ida y vuelta”, por sus iniciales en inglés. El protocolo TCP se asegura de que los datos han sido transmitidos de forma fiable entre máquinas retransmitiendo un datagrama si éste ha sido perdido. El protocolo TCP mantiene un contador de cuánto tarda un datagrama en ser enviado a su destino, y el "recibo" que se recibe, de forma que sabe cuánto esperar antes de suponer que un datagrama necesita retrasmitirse. Este proceso se llama tiempo de ida y vuelta. El tiempo de ida y vuelta inicial es el valor que el protocolo TCP usará cuando se establezca una conexión por primera vez. Para la mayoría de los tipos de redes, el valor por defecto es válido, pero para algunas redes lentas, especialmente ciertos tipos de redes de radiopaquetes de aficionados, el tiempo es demasiado pequeño y causa retransmisiones innecesarias. El valor de irtt puede ajustarse usando el comando route. Los campos a 0 significan que se está usando el valor por defecto.

Para terminar, el último campo muestra el interfaz de red que usará esta ruta.

5.9.2. Consulta de las estadísticas de una interfaz

Cuando se invoca con el indicador –i netstat presenta las estadísticas para las interfaces de red configuradas en ese momento. Si también se pasa la opción –a, mostrará todas las interfaces presentes en el núcleo, y no sólo aquellas que hayan sido configuradas. En vstout, la salida para netstat sería algo así:
    # netstat -i
    Kernel Interface table
    Iface MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
    lo      0   0   3185      0      0      0   3185      0      0      0 BLRU
    eth0 1500   0 972633     17     20    120 628711    217      0      0 BRU

Los campos MTU y Met muestran los valores actuales de MTU y de métrica para esa interfaz. Las columnas RX y TX muestran cuántos paquetes han sido recibidos o transmitidos sin errores (RX-OK/TX-OK) o dañados (RX-ERR/TX-ERR); cuántos fueron descartados (RX-DRP/TX-DRP); y cuántos se perdieron por un desbordamiento. (RX-OVR/TX-OVR).

La última columna muestra los indicadores activos para cada interface. Son abreviaturas del nombre completo del indicador, que se muestran con la configuración de la interfaz que ofrece ifconfig:

B

Dirección de difusión activa.

L

La interfaz es un dispositivo de lazo.

M

Se reciben todos los paquetes (modo promiscuo).

O

ARP no funciona para esta interfaz.

P

Conexión punto a punto.

R

La interfaz funciona.

U

La interfaz está activa.

5.9.3. Mostrar conexiones

netstat ofrece una serie de opciones para mostrar los puertos activos o pasivos. Las opciones –t, –u, –w, y –x muestran conexiones activas a puertos TCP, UDP, RAW, o Unix. Si incluye además el indicador –a, se mostrarán también los puertos que estén esperando una conexión (es decir, que estén escuchando). Esto le dará una lista de todos los servidores que estén corriendo actualmente en su sistema.

Llamar a netstat -ta en vlager produce esta salida:
    $ netstat -ta
    Active Internet Connections
    Proto Recv-Q Send-Q Local Address    Foreign Address    (State)
    tcp        0      0 *:domain         *:*                LISTEN
    tcp        0      0 *:time           *:*                LISTEN
    tcp        0      0 *:smtp           *:*                LISTEN
    tcp        0      0 vlager:smtp      vstout:1040        ESTABLISHED
    tcp        0      0 *:telnet         *:*                LISTEN
    tcp        0      0 localhost:1046   vbardolino:telnet  ESTABLISHED
    tcp        0      0 *:chargen        *:*                LISTEN
    tcp        0      0 *:daytime        *:*                LISTEN
    tcp        0      0 *:discard        *:*                LISTEN
    tcp        0      0 *:echo           *:*                LISTEN
    tcp        0      0 *:shell          *:*                LISTEN
    tcp        0      0 *:login          *:*                LISTEN

Esta salida muestra que la mayoría de los servidores están simplemente esperando una conexión externa. Sin embargo, la cuarta línea muestra una conexión SMTP desde vstout, y la sexta línea le indica que usted está haciendo una conexión telnet a vbardolino.[1]

El indicador –a por sí sólo indicará todos los sockets de todo tipo.

Notas

[1]

Para saber si una conexión es saliente por los números de puerto. El número de puerto mostrado por una máquina que llama siempre será un entero simple. En el caso de llamar a una máquina, usaremos un puerto correspondiente a un servicio conocido, por lo que netstat usará el nombre simbólico, como smtp, que encuentre en /etc/services.