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.