Effectuer des captures de paquets à laide dun renifleur peut être une méthode extrêmement puissante pour diagnostiquer des problèmes complexes. Lorsque tout le reste échoue, il est souvent utile de visualiser les données brutes envoyées sur le fil. Les paquets ne mentent pas, et analyser le trafic de votre application à un faible niveau peut révéler des symptômes plus profonds dun problème (ou révéler un problème dont vous ne saviez même pas quil existait).
Dans cet article, nous couvrira quelques principes de base de lutilisation de loutil tcpdump
basé sur la CLI.
Principes de base de Sniffer
Alors dabord les choses dabord: que voulons-nous dire quand nous disons «renifleur de paquets»? Un renifleur de paquets est simplement un logiciel qui vous permet de capturer des paquets sur votre réseau. Tcpdump et Wireshark sont des exemples de renifleurs de paquets. Tcpdump fournit un renifleur de paquets CLI, et Wireshark fournit une interface graphique riche en fonctionnalités pour renifler et analyser les paquets.
Par défaut, tcpdump
fonctionne en mode promiscuité. Cela signifie simplement que tous les paquets atteignant un hôte seront envoyés à tcpdump
pour inspection. Ce paramètre inclut même le trafic qui nétait pas destiné à lhôte spécifique sur lequel vous effectuez la capture, tel que le trafic de diffusion et de multidiffusion. Bien sûr, tcpdump
nest pas un logiciel magique: il ne peut capturer que les paquets qui atteignent dune manière ou dune autre lune des interfaces physiques de votre machine.
Installation tcpdump
est simple. Il est disponible dans les référentiels de paquets standard sur votre système Red Hat, et vous pouvez linstaller par son nom:
Scénarios courants de reniflage de paquets
Capturer tout le trafic entrant dans votre machine peut sembler conceptuellement cool, mais cela semble également assez bas pour de nombreuses activités que nous effectuons dans notre travail quotidien en tant quadministrateurs système. Alors, quand utiliseriez-vous un outil de capture de paquets? Je me tourne généralement vers un renifleur de paquets lorsque je dépanne un problème d’application réseau et que j’ai épuisé toutes les autres options. Souvent, jai déjà effectué un dépannage de base du réseau et examiné les fichiers journaux des applications, mais je ne parviens toujours pas à aller au fond dun problème. À ce stade, lancer un renifleur de paquets pour observer les données réelles envoyées sur le câble peut être instructif.
Un autre cas dutilisation formidable dun renifleur de paquets est pédagogique. Regarder les paquets impliqués dans un échange dapplications peut grandement contribuer à améliorer votre compréhension des protocoles sous-jacents. Par exemple, il peut être inestimable dobserver le flux de paquets complet dune requête DNS récursive lorsque vous essayez de comprendre le fonctionnement du DNS.
Effectuer des captures de paquets de base
La meilleure façon dapprendre est en plongeant simplement, commençons par quelques captures de paquets de base. Commençons par essayer tcpdump
sans aucune option spéciale. Notez que vous devrez être le super-utilisateur pour effectuer des captures de paquets (techniquement, vous pouvez lexécuter à partir dun compte standard avec des fonctionnalités spéciales, mais il est généralement plus facile de lexécuter en tant que root). Utilisez Ctrl + C ou envoyez un SIGTERM à lID de processus (PID) tcpdump
pour arrêter la capture.
Default tcpdump
To voir la sortie par défaut de tcpdump
, tapez simplement la commande:
Remarque: Plutôt que davoir beaucoup de sortie en vol avant dappuyer sur Ctrl + C, vous pouvez spécifier combien de paquets vous voulez voir avec lindicateur -c
. La commande ci-dessus pourrait à la place être tcpdump -c 6
pour obtenir les mêmes résultats (six paquets capturés).
La sortie de tcpdump
peut être un peu intimidant au début, mais vous vous habituerez à le regarder après avoir utilisé cet outil plusieurs fois. Décomposons les champs, de gauche à droite:
Renifler une interface spécifique
Notez que le haut de la sortie de lexemple précédent vous montre linterface qui tcpdump
commence la capture sur (eth0), et le bas de la capture comprend des statistiques récapitulatives sur les paquets capturés.
La première chose que vous voudrez probablement faire lors de lutilisation de tcpdump
consiste à spécifier une interface particulière pour effectuer des captures. Par défaut, tcpdump
choisira linterface numérotée la plus basse qui est « up ». De nombreux serveurs ont plusieurs interfaces et vous souhaiterez être explicite sur linterface que vous utilisez pour la capture. De plus, certains types dinterfaces «spéciales», comme une interface netfilter
, peuvent flotter en haut de la liste. Ce comportement peut prêter à confusion, il est donc préférable de spécifier linterface qui vous intéresse.
Commençons par afficher les interfaces disponibles pour la capture:
Avec une liste de interfaces à notre disposition, nous pouvons maintenant spécifier linterface à écouter avec le drapeau -i
.Notez que le nom de linterface ou le numéro de la commande --list-interfaces
peut être utilisé:
Lexamen des captures ci-dessus nous fournit des informations de base sur les paquets traversant notre réseau. Il semble que ces paquets contiennent une sortie STP (Spanning Tree Protocol), peut-être à partir dun commutateur en amont. Techniquement, ce ne sont pas des paquets, ce sont des couches de deux images. Cependant, vous entendrez les termes utilisés de manière interchangeable lors de la discussion des captures de paquets.
Obtenir plus dinformations
Le résultat de dépannage simple de lexemple précédent peut être idéal pour identifier les problèmes évidents, mais parfois nous avons besoin plus dinformations pour vraiment creuser un problème complexe. Savoir comment ajuster la verbosité de votre capture est important, car cela vous permet de creuser plus profondément dans les données réelles contenues dans les paquets.
Le niveau de verbosité de tcpdump
est contrôlé en ajoutant entre un et trois indicateurs -v
à la commande:
Notez quen spécifiant le niveau maximal de verbosité, je peux voir beaucoup plus dinformations sur le corps du paquet. Ci-dessus, nous pouvons voir des informations supplémentaires sur les données dans le paquet STP, telles que lID du pont racine et le coût du chemin racine. Si vous ne connaissez pas STP, ne vous en faites pas. La chose importante à noter ici est quen augmentant la verbosité, nous pouvons obtenir des informations supplémentaires sur notre trafic réseau.
Voir les octets exacts dun paquet
Augmenter la verbosité est pratique, mais nous ne voyez toujours pas la viande du contenu des paquets. Si vous voulez vraiment voir les octets exacts qui se trouvent dans les paquets, vous pouvez utiliser les indicateurs -x
et -X
. Lindicateur -x
imprime les données de chaque paquet en hexadécimal, tandis que lindicateur -X
imprime également les données en ASCII. Voici la sortie utilisant -x
:
Et voici la sortie utilisant -X
:
Notez les données hexadécimales et ASCII dans les exemples ci-dessus. Dans ce cas, jeffectuais une requête denregistrement DNS A pour . Notez également que jai utilisé lindicateur
-c
pour spécifier le nombre de paquets à capturer, et jai fourni un filtre de capture de port 53
. Nous discuterons des filtres dans le prochain article.
Sen tenir aux nombres
Lorsque vous travaillez avec tcpdump
, vous remarquerez peut-être que son comportement par défaut est de résoudre automatiquement les adresses IP en noms de domaine complets (FQDN). Tcpdump traduira également les numéros de port (tels que 22) en noms conviviaux (tels que SSH). Bien que ce comportement soit agréable, nous voulons souvent voir les données numériques afin de ne pas obscurcir en aucune façon notre dépannage. Ce comportement par défaut peut être modifié en transmettant soit -n
pour désactiver les recherches d’adresse IP, soit -nn
pour désactiver les recherches d’adresse IP et de port.
Voici le résultat lorsque vous utilisez -nn
:
Sauvegarde de votre vidage
À un moment donné, vous voudrez peut-être pour enregistrer vos captures de paquets pour une analyse ultérieure ou pour une analyse plus approfondie avec un outil graphique tel que Wireshark. Cette tâche peut être facilement accomplie avec lindicateur -w
, qui vous permet décrire un fichier de capture de paquets:
Remarque: vous pouvez lire votre fichier enregistré en utilisant tcpdump
avec lindicateur -r
, ou avec une autre application prenant en charge le format de fichier pcap.
Comme nous pouvons le voir ci-dessus , le drapeau -w
a produit un fichier pcap pratique que nous pouvons emporter avec nous.
Conclusion
La capture de paquets est une technique puissante dans votre inventaire de compétences de dépannage réseau, en particulier lorsque vous êtes bloqué sur un problème et que le reste du réseau semble correct. Comprendre comment utiliser tcpdump
sur la ligne de commande peut vous éviter des heures de frustration lorsque vous essayez de résoudre des problèmes dapplication réseau, et la syntaxe est assez intuitive une fois que vous vous y êtes habitué.