GNU/Linux >> Tutoriales Linux >  >> Linux

Comando Tcpdump en Linux

tcpdump es una utilidad de línea de comandos que puede usar para capturar e inspeccionar el tráfico de red que va y viene de su sistema. Es la herramienta más utilizada entre los administradores de red para solucionar problemas de red y realizar pruebas de seguridad.

A pesar de su nombre, con tcpdump , también puede capturar tráfico que no sea TCP, como UDP, ARP o ICMP. Los paquetes capturados se pueden escribir en un archivo o salida estándar. Una de las características más potentes de tcpdump comando es su capacidad para usar filtros y capturar solo los datos que desea analizar.

En este artículo, cubriremos los conceptos básicos de cómo usar tcpdump comando en Linux.

Instalando tcpdump #

tcpdump se instala de forma predeterminada en la mayoría de las distribuciones de Linux y macOS. Para verificar si tcpdump el comando está disponible en su tipo de sistema:

tcpdump --version

La salida debería verse así:

tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.1.1b  26 Feb 2019

Si tcpdump no está presente en su sistema, el comando anterior imprimirá "tcpdump:comando no encontrado". Puede instalar fácilmente tcpdump usando el administrador de paquetes de tu distribución.

Instalando tcpdump en Ubuntu y Debian #

sudo apt update && sudo apt install tcpdump

Instalando tcpdump en CentOS y Fedora #

sudo yum install tcpdump

Instalando tcpdump en Arch Linux #

sudo pacman -S tcpdump

Captura de paquetes con tcpdump #

La sintaxis general para tcpdump El comando es el siguiente:

tcpdump [options] [expression]
  • El comando options le permite controlar el comportamiento del comando.
  • El filtro expression define qué paquetes serán capturados.

Solo root o usuario con sudo los privilegios pueden ejecutar tcpdump . Si intenta ejecutar el comando como un usuario sin privilegios, obtendrá un error que dice:"No tiene permiso para capturar en ese dispositivo".

El caso de uso más simple es invocar tcpdump sin opciones ni filtros:

sudo tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
15:47:24.248737 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
15:47:24.248785 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 108:144, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 36
15:47:24.248828 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 144:252, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108

... Long output suppressed

23116 packets captured
23300 packets received by filter
184 packets dropped by kernel

tcpdump continuará capturando paquetes y escribiendo en la salida estándar hasta que reciba una señal de interrupción. Usa el Ctrl+C combinación de teclas para enviar una señal de interrupción y detener el comando.

Para una salida más detallada, pase -v opción, o -vv para una salida aún más detallada:

sudo tcpdump -vv

Puede especificar el número de paquetes a capturar utilizando -c opción. Por ejemplo, para capturar solo diez paquetes, escribiría:

sudo tcpdump -c 10

Después de capturar los paquetes, tcpdump se detendrá.

Cuando no se especifica ninguna interfaz, tcpdump usa la primera interfaz que encuentra y descarga todos los paquetes que pasan por esa interfaz.

Utilice el -D opción para imprimir una lista de todas las interfaces de red disponibles de las que tcpdump puede recopilar paquetes:

sudo tcpdump -D

Para cada interfaz, el comando imprime el nombre de la interfaz, una breve descripción y un índice asociado (número):

1.ens3 [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]

El resultado anterior muestra que ens3 es la primera interfaz encontrada por tcpdump y se usa cuando no se proporciona una interfaz al comando. La segunda interfaz any es un dispositivo especial que le permite capturar todas las interfaces activas.

Para especificar la interfaz en la que desea capturar el tráfico, invoque el comando con -i opción seguida del nombre de la interfaz o el índice asociado. Por ejemplo, para capturar todos los paquetes de todas las interfaces, especificaría any interfaz:

sudo tcpdump -i any

Por defecto, tcpdump realiza una resolución DNS inversa en las direcciones IP y traduce los números de puerto en nombres. Usa el -n opción para deshabilitar la traducción:

sudo tcpdump -n

Omitir la búsqueda de DNS evita generar tráfico de DNS y hace que la salida sea más legible. Se recomienda usar esta opción siempre que invoque tcpdump .

En lugar de mostrar el resultado en la pantalla, puede redirigirlo a un archivo usando los operadores de redirección > y >> :

sudo tcpdump -n -i any > file.out

También puede ver los datos mientras los guarda en un archivo usando el tee comando:

sudo tcpdump -n -l | tee file.out

El -l opción en el comando anterior le dice a tcpdump para hacer que la línea de salida esté almacenada en búfer. Cuando no se utiliza esta opción, la salida no se escribirá en la pantalla cuando se genere una nueva línea.

Comprender tcpdump Salida #

tcpdump genera información para cada paquete capturado en una nueva línea. Cada línea incluye una marca de tiempo e información sobre ese paquete, según el protocolo.

El formato típico de una línea de protocolo TCP es el siguiente:

[Timestamp] [Protocol] [Src IP].[Src Port] > [Dst IP].[Dst Port]: [Flags], [Seq], [Ack], [Win Size], [Options], [Data Length]

Vayamos campo por campo y expliquemos la siguiente línea:

15:47:24.248737 IP 192.168.1.185.22 > 192.168.1.150.37445: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
  • 15:47:24.248737 - La marca de tiempo del paquete capturado está en hora local y utiliza el siguiente formato:hours:minutes:seconds.frac , donde frac son fracciones de segundo desde la medianoche.

  • IP - El protocolo de paquetes. En este caso, IP significa la versión 4 del protocolo de Internet (IPv4).

  • 192.168.1.185.22 - La dirección IP y el puerto de origen, separados por un punto (. ).

  • 192.168.1.150.37445 - La dirección IP y el puerto de destino, separados por un punto (. ).

  • Flags [P.] - Campo Indicadores TCP. En este ejemplo, [P.] significa paquete de reconocimiento de inserción, que se utiliza para reconocer el paquete anterior y enviar datos. Otros valores de campo de marca típicos son los siguientes:

    • [.] - ACK (reconocimiento)
    • [S] - SYN (Iniciar conexión)
    • [P] - PSH (datos de inserción)
    • [F] - FIN (Finalizar conexión)
    • [R] - RST (Restablecer conexión)
    • [S.] - SYN-ACK (paquete SynAcK)
  • seq 201747193:201747301 - El número de secuencia está en first:last notación. Muestra el número de datos contenidos en el paquete. Excepto por el primer paquete en el flujo de datos donde estos números son absolutos, todos los paquetes posteriores se usan como posiciones de bytes relativas. En este ejemplo, el número es 201747193:201747301 , lo que significa que este paquete contiene los bytes 201747193 a 201747301 del flujo de datos. Utilice el -S opción para imprimir números de secuencia absolutos.

  • ack 1226568763 El número de reconocimiento es el número de secuencia de los siguientes datos esperados por el otro extremo de esta conexión.

  • win 402 - El número de ventana es el número de bytes disponibles en el búfer de recepción.

  • options [nop,nop,TS val 1051794587 ecr 2679218230] - Opciones de TCP. nop , o "sin operación" es el relleno utilizado para hacer que el encabezado TCP sea múltiplo de 4 bytes. TS val es una marca de tiempo TCP y ecr representa una respuesta de eco. Visite la documentación de la IANA para obtener más información sobre las opciones de TCP.

  • length 108 - La longitud de los datos de carga útil

tcpdump Filtros #

Cuando tcpdump se invoca sin filtros, captura todo el tráfico y produce una gran cantidad de resultados que dificultan la búsqueda y el análisis de los paquetes de interés.

Los filtros son una de las características más poderosas de tcpdump dominio. Ya que le permiten capturar solo aquellos paquetes que coincidan con la expresión. Por ejemplo, al solucionar problemas relacionados con un servidor web, puede usar filtros para obtener solo el tráfico HTTP.

tcpdump utiliza la sintaxis de Berkeley Packet Filter (BPF) para filtrar los paquetes capturados mediante varios parámetros de mecanizado, como protocolos, direcciones IP y puertos de origen y destino, etc.

En este artículo, veremos algunos de los filtros más comunes. Para obtener una lista de todos los filtros disponibles, consulte la página de manual de pcap-filter.

Filtrado por Protocolo #

Para restringir la captura a un protocolo en particular, especifique el protocolo como filtro. Por ejemplo, para capturar solo el tráfico UDP, ejecutaría:

sudo tcpdump -n udp

Otra forma de definir el protocolo es usar el proto calificador, seguido del número de protocolo. El siguiente comando filtrará el protocolo número 17 y producirá el mismo resultado que el anterior:

sudo tcpdump -n proto 17

Para obtener más información sobre los números, consulte la lista de números de protocolo IP.

Filtrado por número de host

Para capturar solo paquetes relacionados con un host específico, use el host calificador:

sudo tcpdump -n host 192.168.1.185

El host puede ser una dirección IP o un nombre.

También puede filtrar la salida a un rango de IP dado usando net Calificatorio. Por ejemplo, para volcar solo paquetes relacionados con 10.10.0.0/16 usarías:

sudo tcpdump -n net 10.10

Filtrado por número de puerto

Para limitar la captura solo a paquetes desde o hacia un puerto específico, use el port Calificatorio. El siguiente comando captura paquetes relacionados con el servicio SSH (puerto 22) usando este comando:

sudo tcpdump -n port 23

El portrange El calificador le permite capturar tráfico en una variedad de puertos:

sudo tcpdump -n portrange 110-150

Filtrado por origen y destino #

También puede filtrar paquetes en función del puerto o host de origen o de destino utilizando el are src , dst , src and dst y src or dst calificadores.

El siguiente comando captura los paquetes entrantes de un host con IP 192.168.1.185:

sudo tcpdump -n src host 192.168.1.185

Para encontrar el tráfico proveniente de cualquier fuente al puerto 80, usaría:

sudo tcpdump -n dst port 80

Filtros complejos #

Los filtros se pueden combinar usando and (&& ), or (|| ) y not (! ) operadores.

Por ejemplo, para capturar todo el tráfico HTTP proveniente de una dirección IP de origen 192.168.1.185, usaría este comando:

sudo tcpdump -n src 192.168.1.185 and tcp port 80

También puede usar paréntesis para agrupar y crear filtros más complejos:

sudo tcpdump -n 'host 192.168.1.185 and (tcp port 80 or tcp port 443)'

Para evitar errores de análisis al usar caracteres especiales, encierre los filtros entre comillas simples.

Aquí hay otro comando de ejemplo para capturar todo el tráfico excepto SSH desde una dirección IP de origen 192.168.1.185:

sudo tcpdump -n src 192.168.1.185 and not dst port 22

Inspección de paquetes n.º

Por defecto tcpdump , captura solo los encabezados de los paquetes. Sin embargo, a veces es posible que deba inspeccionar el contenido de los paquetes.

tcpdump te permite imprimir el contenido de los paquetes en ASCII y HEX.

El -A opción le dice a tcpdump para imprimir cada paquete en ASCII y -x en hexadecimal:

sudo tcpdump -n -A

Para mostrar el contenido del paquete tanto en HEX como en ASCII, use -X opción:

sudo tcpdump -n -X

Leer y escribir capturas en un archivo #

Otra característica útil de tcpdump es escribir los paquetes en un archivo. Esto es útil cuando está capturando una gran cantidad de paquetes o capturando paquetes para su posterior análisis.

Para comenzar a escribir en un archivo, use -w opción seguida del archivo de captura de salida:

sudo tcpdump -n -w data.pcap

Este comando anterior guardará la captura en un archivo llamado data.pcap . Puede nombrar el archivo como desee, pero es una convención común usar .pcap extensión (captura de paquetes).

Cuando -w se utiliza la opción, la salida no se muestra en la pantalla. tcpdump escribe paquetes sin procesar y crea un archivo binario que no se puede leer con un editor de texto normal.

Para inspeccionar el contenido del archivo, invoque tcpdump con el -r opción:

sudo tcpdump -r data.pcap

Si desea ejecutar tcpdump en el fondo, agregue el símbolo de y comercial (& ) al final del comando.

El archivo de captura también se puede inspeccionar con otras herramientas de análisis de paquetes, como Wireshark.

Al capturar paquetes durante un largo período de tiempo, puede habilitar la rotación de archivos. tcpdump le permite crear nuevos archivos y rotar el archivo de volcado en un intervalo de tiempo específico o tamaño fijo. El siguiente comando creará hasta diez archivos de 200 MB, llamados file.pcap0 , file.pcap1 , y así sucesivamente:antes de sobrescribir archivos más antiguos.

sudo tcpdump -n -W 10 -C 200 -w /tmp/file.pcap

Una vez que se generan diez archivos, los archivos más antiguos se sobrescribirán.

Tenga en cuenta que solo debe ejecutar tcpdump solo durante la resolución de problemas.

Si desea iniciar tcpdump en un momento específico, puede usar un cronjob. tcpdump no tiene una opción para salir después de un tiempo determinado. Puede usar el timeout comando para detener tcpdump después de algún tiempo. Por ejemplo, para salir después de 5 minutos, usaría:

sudo timeout 300 tcpdump -n -w data.pcap

Conclusión #

tcpdump es una herramienta de línea de comandos para analizar y solucionar problemas relacionados con la red.

Este artículo le presentó los conceptos básicos de tcpdump uso y sintaxis. Para obtener documentación más detallada, visite el sitio web tcpdump.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.


Linux
  1. Cómo capturar y analizar paquetes con el comando tcpdump en Linux

  2. comando linux mv

  3. Linux du comando

  4. Comando IP de Linux

  5. Comando cd de linux

Comando W en Linux

Comando Tcpdump en Linux

Al mando en Linux

Comando Df en Linux

Comando tcpdump de Linux

Analizador de paquetes:15 ejemplos de comandos TCPDUMP