Dans cet article, nous expliquerons comment résoudre les problèmes de réseau sous Linux à l'aide de la commande tcpdump.
tcpdump est un analyseur de paquets en ligne de commande flexible et puissant ; et libpcap, une bibliothèque C/C++ portable pour la capture du trafic réseau. Un outil puissant et polyvalent qui comprend de nombreuses options et filtres, tcpdump peut être utilisé dans une variété de cas. Puisqu'il s'agit d'un outil en ligne de commande, il est idéal pour s'exécuter sur des serveurs ou des appareils distants pour lesquels une interface graphique n'est pas disponible, afin de collecter des données pouvant être analysées ultérieurement. Il peut également être lancé en arrière-plan ou en tant que tâche planifiée à l'aide d'outils tels que cron.
Commençons par le processus d'installation.
1. Installez tcpdump
Si tcpdump n'est pas déjà installé sur votre système, vous pouvez l'installer à l'aide de la commande suivante :
Pour les systèmes basés sur CentOS ou Red Hat Enterprise Linux :
# dnf install tcpdump -y
Pour le système basé sur Ubuntu :
# apt-get install tcpdump -y
2. Vérifiez l'installation
Pour vérifier l'installation, utilisez la commande suivante :
# which tcpdump
Sortir:
/usr/sbin/tcpdump
Capturer des paquets avec tcpdump
Avant de capturer les paquets, vérifiez l'interface réseau à l'aide des commandes suivantes :
# tcpdump -D
Il affichera toutes les interfaces réseau disponibles.
Maintenant, commençons à capturer quelques paquets à l'aide des commandes suivantes :
# tcpdump --interface any
Tcpdump continue de capturer des paquets jusqu'à ce qu'il reçoive un signal d'interruption. Vous pouvez interrompre la capture en appuyant sur Ctrl+C. Pour limiter le nombre de paquets capturés et arrêter tcpdump, utilisez l'option -c (pour le nombre) :
# tcpdump -i any -c 10
Désactiver la résolution de noms
Dépannage des problèmes de réseau, il est souvent plus facile d'utiliser les adresses IP et les numéros de port ; désactivez la résolution de nom en utilisant l'option -n et la résolution de port avec -nn :
# tcpdump -i any -c5 -nn
Comme ci-dessus, la commande capturera la sortie et affiche désormais les adresses IP et les numéros de port.
Filtrage des paquets
L'une des fonctionnalités les plus puissantes de tcpdump est sa capacité à filtrer les paquets capturés en utilisant une variété de paramètres, tels que les adresses IP source et de destination, les ports, les protocoles, etc. Examinons quelques-uns des plus courants.
Pour capturer uniquement les paquets ICMP, utilisez les commandes suivantes :
# tcpdump -i any -c10 icmp
Limitez la capture aux seuls paquets liés à un hôte spécifique en utilisant le filtre d'hôte :
# tcpdump -i any -c5 -nn host 192.168.0.12
La commande ci-dessus capturera et affichera uniquement les paquets vers et depuis l'hôte 192.168.0.12.
Pour filtrer les paquets en fonction du service ou du port souhaité, utilisez le filtre de port. Par exemple, capturez des paquets liés à un service Web (HTTP) à l'aide de cette commande :
# tcpdump -i any -c10 -nn port 80
Pour filtrer les paquets en fonction de l'adresse IP ou du nom d'hôte source ou de destination. Par exemple, pour capturer des paquets de l'hôte 192.168.0.12 :
# tcpdump -i any -c10 -nn src 192.168.0.12
Enregistrer les captures dans un fichier
Pour enregistrer les paquets dans un fichier au lieu de les afficher à l'écran, utilisez l'option -w (pour l'écriture) :
# tcpdump -i any -c10 -nn -w webserver.pcap port 80
La commande ci-dessus permettra de capturer des paquets en mode batch pendant la nuit, par exemple, et de vérifier les résultats le matin. Cela aide également lorsqu'il y a trop de paquets à analyser, car la capture en temps réel peut se produire trop rapidement.
Plus d'exemples de commandes
Pour imprimer les paquets de début et de fin (les paquets SYN et FIN) de chaque conversation TCP impliquant un hôte non local.
# tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
Pour imprimer les paquets TCP avec les drapeaux RST et ACK tous deux définis. (c'est-à-dire, sélectionnez uniquement les drapeaux RST et ACK dans le champ des drapeaux, et si le résultat est "RST et ACK tous les deux définis", correspond)
# tcpdump 'tcp[tcpflags] & (tcp-rst|tcp-ack) == (tcp-rst|tcp-ack)'
Pour imprimer tous les paquets HTTP IPv4 vers et depuis le port 80, c'est-à-dire imprimer uniquement les paquets qui contiennent des données, pas, par exemple, les paquets SYN et FIN et les paquets ACK uniquement. (IPv6 est laissé en exercice au lecteur.)
# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<2)) -="" ((tcp[12]&0xf0)="">>2)) != 0)'
Pour imprimer des paquets IP de plus de 576 octets envoyés via la passerelle snup :
# tcpdump 'gateway snup and ip[2:2] > 576'
Pour imprimer des paquets de diffusion ou de multidiffusion IP qui n'ont pas été envoyés via la diffusion ou la multidiffusion Ethernet :
# tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
Pour imprimer tous les paquets ICMP qui ne sont pas des demandes/réponses d'écho (c'est-à-dire pas des paquets ping) :
# tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
Vérifiez la page de manuel à l'aide de la commande suivante :
# man tcpdump
Dans cet article, nous avons vu comment résoudre les problèmes de réseau sous Linux à l'aide de la commande tcpump.
Obtenez un serveur dédié double série E5 hautes performances et un VPS KVM bon marché.