Búsqueda de sitios web

TCPflow: analizar y depurar el tráfico de red en Linux


TCPflow es una potente herramienta gratuita, de código abierto y basada en línea de comandos para analizar el tráfico de red en sistemas similares a Unix, como Linux. Captura datos recibidos o transferidos a través de conexiones TCP y los almacena en un archivo para su posterior análisis, en un formato útil que permite el análisis y la depuración de protocolos.

Lea también: 16 mejores herramientas de monitoreo de ancho de banda para analizar el uso de la red en Linux

En realidad, es una herramienta similar a tcpdump, ya que procesa paquetes desde el cable o desde un archivo almacenado. Admite las mismas poderosas expresiones de filtrado que admite su contraparte. La única diferencia es que tcpflow ordena todos los paquetes TCP y ensambla cada flujo en un archivo separado (un archivo para cada dirección del flujo) para su posterior análisis.

Su conjunto de funciones incluye un sistema de complementos avanzado para descomprimir conexiones HTTP comprimidas, deshacer la codificación MIME o invocar programas de terceros para el posprocesamiento y mucho más.

Hay muchos casos de uso para tcpflow que incluyen comprender los flujos de paquetes de red y también admite realizar análisis forenses de red y divulgar el contenido de las sesiones HTTP.

Cómo instalar TCPflow en sistemas Linux

TCPflow está disponible en los repositorios oficiales de las principales distribuciones GNU/Linux. Puede instalarlo utilizando su administrador de paquetes como se muestra.

sudo apt install tcpflow	#Debian/Ubuntu
sudo yum install tcpflow	#CentOS/RHEL
sudo dnf install tcpflow	#Fedora 22+

Después de instalar tcpflow, puede ejecutarlo con privilegios de superusuario; de lo contrario, utilice el comando sudo. Tenga en cuenta que escucha en la interfaz de red activa (por ejemplo, enp0s3).

sudo tcpflow

tcpflow: listening on enp0s3

De forma predeterminada, tcpflow almacena todos los datos capturados en archivos que tienen nombres en el formulario (esto puede ser diferente si usa ciertas opciones como marca de tiempo).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

Ahora hagamos una lista de directorios para ver si el flujo tcp se ha capturado en algún archivo.

ls -1

total 20
-rw-r--r--. 1 root    root     808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443
-rw-r--r--. 1 root    root      59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920

Como mencionamos anteriormente, cada flujo TCP se almacena en su propio archivo. En el resultado anterior, puede ver que hay tres archivos de transcripción, que indican tcpflow en dos direcciones opuestas, donde la IP de origen está en el primer archivo y la IP de destino en el segundo archivo y viceversa.

El primer archivo 192.168.043.031.52920-216.058.210.034.00443 contiene datos transferidos desde el host 192.168.043.031 (el host local en el que se ejecutó tcpflow) a través del puerto 52920, para alojar 216.058.210.034 (el host remoto) a través del puerto 443.

Y el segundo archivo 216.058.210.034.00443-192.168.043.031.52920 contiene datos enviados desde el host 216.058.210.034 (el host remoto) a través del puerto 443 para alojar 192.168.043.031 (el host local en el que se ejecutó tcpflow) a través del puerto 52920.

También se genera un informe XML, que contiene información sobre el programa, como cómo se compiló, la computadora en la que se ejecutó y un registro de cada conexión TCP.

Como habrás notado, tcpflow almacena los archivos de transcripción en el directorio actual de forma predeterminada. La opción -o puede ayudarle a especificar el directorio de salida donde se escribirán los archivos de transcripción.

sudo tcpflow -o tcpflow_files
$ sudo ls -l tcpflow_files

total 32
-rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986
-rw-r--r--. 1 root root   45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496
-rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954
-rw-r--r--. 1 root root   68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436
-rw-r--r--. 1 root root  573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443
-rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443
-rw-r--r--. 1 root root   38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443
-rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml

También puede imprimir el contenido de los paquetes en stdout a medida que se reciben, sin almacenar ningún dato capturado en archivos, utilizando el indicador -c de la siguiente manera.

Para probar esto de manera efectiva, abra una segunda terminal y ejecute un ping o navegue por Internet. Debería poder ver los detalles del ping o los detalles de navegación capturados por tcpflow.

sudo tcpflow -c

Es posible capturar todo el tráfico en un puerto en particular, por ejemplo el puerto 80 (HTTP). En el caso del tráfico HTTP, podrá ver los encabezados HTTP seguidos del contenido en la salida estándar o en un archivo si se elimina el modificador -c.

sudo tcpflow port 80

Para capturar paquetes de una interfaz de red específica, utilice el indicador -i para especificar el nombre de la interfaz.

sudo tcpflow -i eth0 port 80

También puede especificar un host de destino (los valores aceptados son dirección IP, nombre de host o dominios), como se muestra.

sudo tcpflow -c host 192.68.43.1
OR
sudo tcpflow -c host www.google.com 

Puede habilitar todo el procesamiento utilizando todos los escáneres con el indicador -a, esto es equivalente al parámetro -e all.

sudo tcpflow -a  
OR
sudo tcpflow -e all

También se puede activar un escáner específico; los escáneres disponibles incluyen md5, http, netviz, tcpdemux y wifiviz (ejecute tcpflow -H para ver información detallada sobre cada escáner).

sudo tcpflow -e http
OR
sudo tcpflow -e md5
OR
sudo tcpflow -e netviz
OR
sudo tcpflow -e tcpdemux
OR
sudo tcpflow -e wifiviz

El siguiente ejemplo muestra cómo habilitar todos los escáneres excepto tcpdemux.

sudo tcpflow -a -x tcpdemux 

TCPflow generalmente intenta poner la interfaz de red en modo promiscuo antes de capturar paquetes. Puede evitar esto usando el indicador -p como se muestra.

sudo tcpflow -p -i eth0

Para leer paquetes de un archivo pcap tcpdump, utilice el indicador -r.

sudo tcpflow -f file.pcap

Puede habilitar el modo detallado usando las opciones -v o -d 10.

sudo tcpflow -v
OR
sudo tcpflow -d 10

Importante: Una limitación de tcpflow es que, en este momento, no comprende los fragmentos de IP y, por lo tanto, los datos se transmiten como parte de las conexiones TCP. Los archivos que contengan fragmentos de IP no se capturarán correctamente.

Para obtener más información y opciones de uso, consulte la página de manual de tcpflow.

man tcpflow 

Repositorio TCPflow Github: https://github.com/simsong/tcpflow

¡Eso es todo por ahora! TCPflow es un potente registrador de flujo TCP que resulta útil para comprender los flujos de paquetes de red y realizar análisis forenses de red, y mucho más. Pruébalo y comparte tu opinión con nosotros en los comentarios.