Recherche de site Web

TCPflow - Analyser et déboguer le trafic réseau sous Linux


TCPflow est un puissant outil gratuit, open source, basé sur une ligne de commande, permettant d'analyser le trafic réseau sur des systèmes de type Unix tels que Linux. Il capture les données reçues ou transférées via des connexions TCP et les stocke dans un fichier pour une analyse ultérieure, dans un format utile qui permet l'analyse et le débogage du protocole.

Lire aussi : 16 meilleurs outils de surveillance de la bande passante pour analyser l'utilisation du réseau sous Linux

Il s'agit en fait d'un outil de type tcpdump car il traite les paquets provenant du réseau ou d'un fichier stocké. Il prend en charge les mêmes expressions de filtrage puissantes que celles prises en charge par son homologue. La seule différence est que tcpflow met tous les paquets TCP en ordre et assemble chaque flux dans un fichier séparé (un fichier pour chaque sens de flux) pour une analyse ultérieure.

Son ensemble de fonctionnalités comprend un système de plug-in avancé pour décompresser les connexions HTTP compressées, annuler l'encodage MIME ou appeler des programmes tiers pour le post-traitement et bien plus encore.

Il existe de nombreux cas d'utilisation de tcpflow, notamment la compréhension des flux de paquets réseau, ainsi que la prise en charge de l'analyse judiciaire du réseau et de la divulgation du contenu des sessions HTTP.

Comment installer TCPflow sur les systèmes Linux

TCPflow est disponible dans les dépôts officiels des distributions GNU/Linux grand public, vous pouvez l'installer à l'aide de votre gestionnaire de paquets comme indiqué.

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

Après avoir installé tcpflow, vous pouvez l'exécuter avec les privilèges de superutilisateur, sinon utilisez la commande sudo. Notez qu'il écoute sur l'interface réseau active (par exemple enp0s3).

sudo tcpflow

tcpflow: listening on enp0s3

Par défaut, tcpflow stocke toutes les données capturées dans des fichiers dont les noms sont sous la forme (cela peut être différent si vous utilisez certaines options telles que horodatage).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

Faisons maintenant une liste de répertoires pour voir si le flux TCP a été capturé dans des fichiers.

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

Comme nous l'avons mentionné précédemment, chaque flux TCP est stocké dans son propre fichier. À partir de la sortie ci-dessus, vous pouvez voir qu'il existe trois fichiers de transcription, qui indiquent tcpflow dans deux directions opposées, où l'adresse IP source dans le premier fichier et l'adresse IP de destination dans le deuxième fichier et vice versa.

Le premier fichier 192.168.043.031.52920-216.058.210.034.00443 contient des données transférées depuis l'hôte 192.168.043.031 (l'hôte local sur lequel tcpflow a été exécuté) via le port 52920, pour héberger 216.058.210.034 (l'hôte distant) via le port 443.

Et le deuxième fichier 216.058.210.034.00443-192.168.043.031.52920 contient des données envoyées depuis l'hôte 216.058.210.034 (l'hôte distant) via le port 443. pour héberger 192.168.043.031 (l'hôte local sur lequel tcpflow a été exécuté) via le port 52920.

Un rapport XML est également généré, qui contient des informations sur le programme telles que la façon dont il a été compilé, l'ordinateur sur lequel il a été exécuté et un enregistrement de chaque connexion TCP.

Comme vous l'avez peut-être remarqué, tcpflow stocke par défaut les fichiers de transcription dans le répertoire courant. L'option -o peut vous aider à spécifier le répertoire de sortie dans lequel les fichiers de transcription seront écrits.

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

Vous pouvez également imprimer le contenu des paquets sur stdout au fur et à mesure de leur réception, sans stocker les données capturées dans des fichiers, en utilisant l'indicateur -c comme suit.

Pour tester cela efficacement, ouvrez un deuxième terminal et exécutez un ping, ou naviguez sur Internet. Vous devriez pouvoir voir les détails du ping ou vos détails de navigation capturés par TCPflow.

sudo tcpflow -c

Il est possible de capturer tout le trafic sur un port particulier, par exemple le port 80 (HTTP). Dans le cas du trafic HTTP, vous pourrez voir les en-têtes HTTP suivis du contenu sur la sortie standard ou dans un seul fichier si le commutateur -c est supprimé.

sudo tcpflow port 80

Pour capturer des paquets d'une interface réseau spécifique, utilisez l'indicateur -i pour spécifier le nom de l'interface.

sudo tcpflow -i eth0 port 80

Vous pouvez également spécifier un hôte cible (les valeurs acceptées sont l'adresse IP, le nom d'hôte ou les domaines), comme indiqué.

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

Vous pouvez activer tous les traitements en utilisant tous les scanners avec l'indicateur -a, cela équivaut au commutateur -e all.

sudo tcpflow -a  
OR
sudo tcpflow -e all

Un scanner spécifique peut également être activé ; les scanners disponibles incluent md5, http, netviz, tcpdemux et wifiviz (exécutez tcpflow -H pour afficher des informations détaillées sur chaque scanner).

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

L'exemple suivant montre comment activer tous les scanners à l'exception de tcpdemux.

sudo tcpflow -a -x tcpdemux 

TCPflow essaie généralement de mettre l'interface réseau en mode promiscuité avant de capturer les paquets. Vous pouvez empêcher cela en utilisant l'indicateur -p comme indiqué.

sudo tcpflow -p -i eth0

Pour lire des paquets à partir d'un fichier pcap tcpdump, utilisez l'indicateur -r.

sudo tcpflow -f file.pcap

Vous pouvez activer le mode verbeux en utilisant les options -v ou -d 10.

sudo tcpflow -v
OR
sudo tcpflow -d 10

Important : une limitation de tcpflow est qu'à l'heure actuelle, il ne comprend pas les fragments IP, donc les données transmises dans le cadre des connexions TCP. contenant des fragments IP ne seront pas correctement capturés.

Pour plus d'informations et d'options d'utilisation, consultez la page de manuel tcpflow.

man tcpflow 

Dépôt TCPflow Github : https://github.com/simsong/tcpflow

C'est tout pour le moment! TCPflow est un puissant enregistreur de flux TCP qui est utile pour comprendre les flux de paquets réseau et effectuer des analyses approfondies du réseau, et bien plus encore. Essayez-le et partagez vos impressions avec nous dans les commentaires.