En este artículo, explicaremos cómo solucionar problemas de red en Linux usando el comando tcpdump.
tcpdump es un potente y flexible analizador de paquetes de línea de comandos; y libpcap, una biblioteca C / C ++ portátil para la captura de tráfico de red. Una herramienta poderosa y versátil que incluye muchas opciones y filtros, tcpdump se puede utilizar en una variedad de casos. Dado que es una herramienta de línea de comandos, es ideal para ejecutarla en servidores o dispositivos remotos para los que no hay una GUI disponible, para recopilar datos que puedan analizarse más tarde. También se puede iniciar en segundo plano o como un trabajo programado utilizando herramientas como cron.
Comencemos con el proceso de instalación.
1. Instale tcpdump
Si tcpdump aún no está instalado en su sistema, puede instalarlo usando el siguiente comando:
Para sistemas basados en CentOS o Red Hat Enterprise Linux:
# dnf install tcpdump -y
Para el sistema basado en Ubuntu:
# apt-get install tcpdump -y
2. Verifique la instalación
Para verificar la instalación, use el siguiente comando:
# which tcpdump
Producción:
/usr/sbin/tcpdump
Capture paquetes con tcpdump
Antes de capturar los paquetes, verifique la interfaz de red usando los siguientes comandos:
# tcpdump -D
Mostrará todas las interfaces de red disponibles.
Ahora, comencemos a capturar algunos paquetes usando los siguientes comandos:
# tcpdump --interface any
Tcpdump continúa capturando paquetes hasta que recibe una señal de interrupción. Puede interrumpir la captura presionando Ctrl + C. Para limitar la cantidad de paquetes capturados y detener tcpdump, use la opción -c (para contar):
# tcpdump -i any -c 10
Deshabilitar la resolución de nombres
Para solucionar problemas de red, a menudo es más fácil utilizar las direcciones IP y los números de puerto; deshabilite la resolución de nombres usando la opción -n y la resolución del puerto con -nn:
# tcpdump -i any -c5 -nn
Como el comando anterior capturará la salida, ahora muestra las direcciones IP y los números de puerto.
Filtrado de paquetes
Una de las características más poderosas de tcpdump es su capacidad para filtrar los paquetes capturados usando una variedad de parámetros, como direcciones IP de origen y destino, puertos, protocolos, etc. Veamos algunos de los más comunes.
Para capturar solo paquetes ICMP, use los siguientes comandos:
# tcpdump -i any -c10 icmp
Limite la captura solo a los paquetes relacionados con un host específico mediante el uso del filtro de host:
# tcpdump -i any -c5 -nn host 192.168.0.12
El comando anterior capturará y mostrará solo paquetes hacia y desde el host 192.168.0.12.
Para filtrar paquetes según el servicio o puerto deseado, use el filtro de puerto. Por ejemplo, capture paquetes relacionados con un servicio web (HTTP) mediante este comando:
# tcpdump -i any -c10 -nn port 80
Para filtrar paquetes según la dirección IP de origen o destino o el nombre de host. Por ejemplo, para capturar paquetes del host 192.168.0.12:
# tcpdump -i any -c10 -nn src 192.168.0.12
Guardar capturas en un archivo
Para guardar paquetes en un archivo en lugar de mostrarlos en la pantalla, use la opción -w (para escribir):
# tcpdump -i any -c10 -nn -w webserver.pcap port 80
El comando anterior permitirá capturar paquetes en modo por lotes durante la noche, por ejemplo, y verificar los resultados por la mañana. También ayuda cuando hay demasiados paquetes para analizar, ya que la captura en tiempo real puede ocurrir demasiado rápido.
Más comandos de ejemplo
Para imprimir los paquetes inicial y final (los paquetes SYN y FIN) de cada conversación TCP que involucre un host no local.
# tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
Para imprimir los paquetes TCP con los indicadores RST y ACK configurados. (es decir, seleccione solo las banderas RST y ACK en el campo de banderas, y si el resultado es "RST y ACK ambos configurados", coincida)
# tcpdump 'tcp[tcpflags] & (tcp-rst|tcp-ack) == (tcp-rst|tcp-ack)'
Para imprimir todos los paquetes HTTP IPv4 hacia y desde el puerto 80, es decir, imprima solo los paquetes que contienen datos, no, por ejemplo, los paquetes SYN y FIN y los paquetes solo ACK. (IPv6 se deja como ejercicio para el lector).
# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<2)) -="" ((tcp[12]&0xf0)="">>2)) != 0)'
Para imprimir paquetes IP de más de 576 bytes enviados a través del gateway snup:
# tcpdump 'gateway snup and ip[2:2] > 576'
Para imprimir paquetes de difusión o multidifusión IP que no se enviaron a través de difusión o multidifusión Ethernet:
# tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
Para imprimir todos los paquetes ICMP que no son solicitudes / respuestas de eco (es decir, no paquetes de ping):
# tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
Verifique la página de manual usando el siguiente comando:
# man tcpdump
En este artículo, hemos visto cómo solucionar problemas de red en Linux usando el comando tcpump.
Obtenga un servidor dedicado de la serie E5 dual de alto rendimiento y un VPS KVM económico.