TCPflow - Analizar y depurar el tráfico de red en Linux


TCPflow es una poderosa herramienta gratuita, de código abierto y línea de comandos para analizar el tráfico de red en sistemas similares a Unix, como Linux. Captura los 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.

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

Su conjunto de características incluye un sistema de complemento 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 son compatibles para 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 distribuciones principales de GNU/Linux, puede instalarlo usando 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 de 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 la salida anterior, puede ver que hay tres archivos de transcripción, que indican tcpflow en dos direcciones opuestas, donde la IP de origen 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 la forma en que se compiló, la computadora en la que se ejecutó y un registro de cada conexión TCP.

Como habrá notado, tcpflow almacena los archivos de transcripción en el directorio actual de manera predeterminada. La opción -o puede ayudarlo 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 a stdout a medida que se reciben, sin almacenar los datos capturados en archivos, utilizando la marca -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 de ping o sus 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 por el contenido, todo en la salida estándar o en un archivo si se elimina el interruptor -c .

$ sudo tcpflow port 80

Para capturar paquetes desde una interfaz de red específica, use la marca -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 la dirección IP, el nombre de host o los 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 interruptor -e

$ 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 

Por lo general, TCPflow intenta poner la interfaz de red en modo promiscuo antes de capturar paquetes. Puede evitarlo utilizando el indicador -p como se muestra.

$ sudo tcpflow -p -i eth0

Para leer paquetes de un archivo pcc tcpdump, use la marca -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

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

$ man tcpflow 

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

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