Comment exécuter une capture de paquets à distance avec Wireshark et tcpdump
Wireshark est un outil puissant, mais il a ses limites. À moins de disposer d’un équipement réseau professionnel, il est difficile d’analyser le trafic qui n’implique pas votre ordinateur.
Parfois, la solution la plus simple consiste à utiliser tcpdump pour capturer le trafic sur le serveur distant, puis à exécuter Wireshark pour l'examiner.
Que sont Wireshark et tcpdump ?
Bien que Wireshark fasse un excellent travail en capturant chaque paquet réseau qui le dépasse, dans certains cas, vous devrez analyser une session à partir d'un serveur distant. À moins que vous ne disposiez d’un équipement réseau spécial, cela peut être difficile. Il est parfois plus facile de capturer le trafic sur le serveur distant, puis de l'analyser sur votre bureau.
Bien que Wireshark fasse un excellent travail en capturant chaque paquet qui le dépasse, dans certains cas, vous devrez analyser une session à partir d'un serveur distant. À moins que vous ne disposiez d’un équipement réseau spécial, cela peut être difficile. Il est parfois plus facile de capturer le trafic sur le serveur distant, puis de l'analyser sur votre bureau.
tcpdump est un analyseur de paquets en ligne de commande. Ce n’est pas aussi simple à utiliser que Wireshark, mais il est tout aussi capable de capturer du trafic. Étant donné que la commande tcpdump s'exécute en mode terminal, il est possible de la lancer via une session SSH. Avec les options de ligne de commande appropriées, vous pouvez exporter une session tcpdump compatible avec Wireshark. Vous pouvez consulter notre aide-mémoire tcpdump pour en savoir plus sur l'installation, capture de paquets , opérations logiques, protocoles et bien plus encore.
Voir également: Alternatives à Wireshark
Avant que tu commences
Pour suivre les instructions de ce guide, vous aurez besoin des éléments suivants :
- Un ordinateur distant avec un serveur SSH et tcpdump installés
- Accès racine
- Services qui génèrent du trafic réseau, comme Apache ou node.js, exécutés sur l'ordinateur distant
- Un ordinateur local avec un client SSH et Wireshark installés
L'objectif est d'utiliser les commandes tcpdump sur l'ordinateur distant, via SSH, pour capturer le trafic réseau. Ensuite, le trafic capturé peut être copié sur l'ordinateur local pour analyse avec Wireshark.
Ceci est utile lorsque vous n'avez pas d'accès physique à la machine distante ou que vous l'exécutez « sans tête », c'est-à-dire sans clavier ni moniteur.
Capturer des paquets avec tcpdump à distance via SSH
Afin de capturer le trafic avec la commande tcpdump, vous devrez vous connecter à l'ordinateur distant via SSH. Vous aurez également besoin d'un accès root, sinon tcpdump ne pourra pas capturer le trafic et vous verrez une erreur indiquant Vous n'êtes pas autorisé à capturer sur cet appareil .
Une fois connecté, exécutez la commande suivante pour commencer à capturer le trafic avec tcpdump :
|_+_|Les options de ligne de commande que j'ai utilisées pour capturer cette session seront expliquées ci-dessous. En bref, la commande ci-dessus capturera tout le trafic sur le périphérique Ethernet et l'écrira dans un fichier nommé tcpdump.pcap dans un format compatible avec Wireshark.
Une fois que vous avez fini de capturer le trafic, terminez la session tcpdump avec Ctrl+C . Vous verrez un bref affichage affichant des informations sur la session de capture.
Avant de pouvoir copier le trafic de votre ordinateur distant vers l'ordinateur local pour analyse avec Wireshark, vous devrez modifier les autorisations. Par défaut, les sessions tcpdump capturées par l'utilisateur root ne peuvent pas être copiées. Utilisez cette commande :
|_+_|Cela vous permettra de copier le fichier sur votre ordinateur local à l'aide de scp, comme indiqué à l'étape suivante.
Copie d'une session tcpdump pour analyse
Une fois que vous avez terminé une session de capture avec la commande tcpdump, vous vous retrouvez avec un problème. Comment le copier sur la machine exécutant Wireshark pour analyse ? Il existe de nombreuses façons, mais je pense que la plus simple est d'utiliser scp. Puisque vous avez déjà capturé des paquets réseau sur une machine sans tête à l'aide de SSH, tout ce dont vous avez besoin pour utiliser scp est déjà installé et exécuté.
Les utilisateurs Windows devront télécharger PSCP , puis copiez le fichier dans C:WindowsSystem32. La plupart des utilisateurs de Mac et Linux disposent déjà de tout ce dont ils ont besoin.
Sous Mac ou Linux, ouvrez une fenêtre de terminal et exécutez la commande suivante pour copier le fichier de capture de session :
|_+_|Ou sous Windows, ouvrez PowerShell et exécutez cette commande :
|_+_|Remplacez par vos informations le cas échéant. Vous serez invité à saisir votre mot de passe. Les commandes que j'ai utilisées se trouvent dans la capture d'écran ci-dessus pour référence.
Vérifiez que le fichier a été copié comme prévu et vous êtes prêt à analyser la session tcpdump avec Wireshark.
Analyse d'une session tcpdump capturée avec Wireshark
L'analyse fonctionne de la même manière qu'avec n'importe quelle capture Wireshark traditionnelle ; la seule chose que vous devez savoir est comment importer le fichier.
Démarrez Wireshark, puis importez la session capturée par tcpdump à l'aide de Fichier -> Ouvrir et recherchez votre fichier. Vous pouvez aussi double-cliquez le fichier de capture tcpdump pour l'ouvrir dans Wireshark, tant qu'il porte l'extension de fichier *.pcap . Si vous avez utilisé le -dans lorsque vous exécutez la commande tcpdump, le fichier se chargera normalement et affichera le trafic.
Dans mon cas, j'exécute un serveur Apache sur l'hôte distant et je souhaite consulter les données HTTP. Je définis le filtre de vue Wireshark approprié et je peux parcourir les images capturées comme d'habitude.
À titre de test, j'ai intégré un élément dans le code HTML qui n'est pas affiché sur la page. Je devrais pouvoir le localiser dans le flux de données et le visualiser avec Wireshark.
Comme vous pouvez le voir, Wireshark est capable d'analyser chaque image et d'afficher parfaitement les données. L'élément que j'ai masqué apparaît dans l'exemple ci-dessus. Le processus de capture est un peu plus complexe lorsque vous utilisez la commande tcpdump, mais tout dans Wireshark fonctionne comme d'habitude.
Utilisation des options de ligne de commande pour tcpdump
La plupart du temps, lorsque vous lancez tcpdump, vous souhaiterez avoir un certain contrôle sur la façon dont vous capturez les paquets et sur l'endroit où vous stockez la session. Vous pouvez contrôler des choses comme ça à l'aide des options de ligne de commande. Voici quelques-unes des options de ligne de commande les plus utiles pour tcpdump.
tcpdump -w
Le -dans L'option de ligne de commande permet une sortie de capture compatible avec Wireshark. Il prend une seule variable, qui est le nom du fichier de sortie tcpdump. Les journaux de capture enregistrés à l'aide de cette option ne seront pas lisibles par l'homme en dehors de Wireshark, car ils sont stockés en binaire plutôt qu'en ASCII.
tcpdump -C
Le -C L'option de ligne de commande vous permet de définir une taille de fichier maximale en octets. Cette option ne fonctionne qu'avec -dans . Par exemple, la commande tcpdump -C 1048576 -w capture.pcap spécifie une taille de capture maximale de 1 Mo (1 048 576 octets) en sortie dans le fichier capture.pcap .
Si la session génère une plus grande quantité de sortie, elle créera de nouveaux fichiers pour la stocker. Ainsi, une capture de 3 Mo générerait capture.pcap , capture1.pcap , et capture2.pcap chacun avec une taille de fichier de 1 Mo.
tcpdump-s
Le -s L'option de ligne de commande définit une longueur maximale de paquet pour chacun en octets et tronque le paquet lorsque la longueur maximale est atteinte. La commande tcpdump -s 0 définit une longueur illimitée pour garantir que tout le contenu du paquet est capturé.
tcpdump -je
Le -je L'option de ligne de commande spécifie le périphérique réseau que vous souhaitez que tcpdump surveille. Si aucune interface n'est spécifiée, la valeur par défaut est l'interface portant le numéro le plus bas en cours d'exécution.
tcpdump -liste-interfaces
L'option de ligne de commande tcpdump -liste-interfaces imprimera une liste de toutes les interfaces disponibles pour que tcpdump puisse s'y attacher. Notez que cela ne démarre pas une session de capture, mais cela vous donnera une liste d'interfaces à utiliser avec le -je option ci-dessus.
tcpdump-c
Le -c L'option de ligne de commande indique à tcpdump de quitter la session après avoir capturé un nombre spécifié de paquets.
tcpdump -n
Le -n l'option de ligne de commande indique la commande tcpdump pas pour résoudre les adresses IP en noms d'hôtes. Ceci est utile lors du dépannage de sites Web derrière un serveur d'équilibrage de charge et, dans quelques autres cas, lorsque l'utilisation d'un nom d'hôte donnerait des résultats ambigus.
tcpdump-v | -vv | -vvv
Les trois options de ligne de commande, -dans , -vv , et -Office de tourisme vous permettent d’augmenter la verbosité de votre session de capture. -dans enregistrera les valeurs TTL pour chaque paquet, ainsi que les informations ToS. -vv affichera TTL et ToS ainsi que des informations supplémentaires dans les paquets NFS. Et -Office de tourisme enregistrera tout ce que font les deux premières options, ainsi que des informations supplémentaires provenant des sessions telnet.
tcpdump -F
Le -F L'option de ligne de commande indique à la commande tcpdump d'utiliser les filtres de capture du fichier spécifié. Plus d’informations sur l’écriture d’un fichier de capture peuvent être trouvées dans la section suivante.
Utiliser des filtres de capture pour tcpdump
Les filtres de capture vous permettent d'affiner les données stockées par tcpdump dans une session. Ils constituent un moyen utile de faciliter un peu l’analyse des données et de réduire la taille des fichiers de capture. Voici quelques-uns des filtres de capture les plus utiles pour tcpdump.
hôte
Ce filtre spécifie que seul le trafic vers et depuis l'hôte cible doit être capturé. Il prend une adresse IP ou un nom d'hôte comme argument.
filet
Le filtre réseau indiquera à votre ordinateur de capturer uniquement le trafic sur un sous-réseau donné et prendra une adresse IP comme argument. Par exemple, 192.168.1.0/24 spécifie que le trafic vers ou depuis tous les hôtes du sous-réseau sera capturé. Notez qu'un masque de sous-réseau en notation barre oblique est requis.
hôte d'heure d'été
Semblable à hôte , ce filtre de capture spécifie que seul le trafic ayant une destination de l'hôte donné sera capturé. Il peut également être utilisé avec filet .
hôte src
Comme ci-dessus, mais ce filtre capture uniquement le trafic provenant de l'hôte ou de l'adresse IP spécifié. Il peut également être utilisé avec filet .
port
Ce filtre indique à tcpdump de capturer le trafic vers et depuis un numéro de port donné. Par exemple, port 443 capturera le trafic TLS.
portrange
Semblable au filtre de port, portrange établit une plage de ports sur lesquels le trafic est capturé. Pour utiliser le filtre portrange, spécifiez le port de début et le port de fin séparés par un tiret. Par exemple, portrange 21-23 .
passerelle
Le filtre de passerelle spécifie que votre ordinateur ne doit capturer que le trafic utilisant un nom d'hôte donné comme passerelle. Le nom d'hôte doit être trouvé dans /etc/hôtes .
diffuser
Le filtre de diffusion spécifie que tcpdump ne doit capturer que le trafic diffusé vers tous les hôtes d'un sous-réseau.
Multidiffusion IP
Ce filtre indique à tcpdump de capturer uniquement le trafic de multidiffusion sur le sous-réseau de la machine hôte.
et/ou/non opérateurs
Les filtres peuvent être enchaînés ensemble à l'aide du et , ou , ou non les opérateurs. Par exemple, pour capturer tout le trafic Web sur un hôte donné, vous pouvez utiliser le filtre port 80 ou port 443 . Ou vous pouvez capturer tout le trafic sur un sous-réseau donné, à l'exception des paquets de diffusion, en utilisant le filtre net 192.168.1.0/24 et non diffusé.
Il est très courant d'utiliser des opérateurs de filtre dans la pratique car ils fournissent une couche de granularité supplémentaire à vos captures. Vous pouvez capturer exactement le trafic dont vous avez besoin, sans trop de discussions supplémentaires sur le réseau.
Expressions complexes avec plusieurs opérateurs
Des expressions encore plus complexes peuvent être créées en entourant plusieurs opérations dans des apostrophes et des parenthèses simples. Par exemple, vous pouvez surveiller tout le trafic de messagerie, y compris SMTP, IMAP, IMAP sur TLS, POP3 et POP3 sur TLS, sur plusieurs hôtes et sous-réseaux, à l'aide d'une commande comme celle-ci :
|_+_|Les expressions complexes avec plusieurs opérateurs peuvent être très utiles, mais elles sont généralement enregistrées dans un fichier de filtre pour être réutilisées, car une seule faute de frappe entraînera l'échec de la capture. Souvent, ils devront être préparés à l’avance et débogués.
Voir également: Didacticiel sur le masque de sous-réseau de longueur variable
Utiliser des fichiers de filtre pour tcpdump
Les filtres ci-dessus peuvent être exécutés sur la ligne de commande lorsque tcpdump est lancé, mais il est souvent utile de créer un fichier de filtre. Un fichier de filtre facilite la reproduction des paramètres de filtre entre les captures car il est réutilisable. Voici les étapes à suivre pour écrire et utiliser un fichier de filtre.
Écrire le fichier de filtre
Les fichiers de filtre utilisent exactement la même notation que la ligne de commande. Ils ne nécessitent aucun caractère spécial ni chiffre magique en haut du fichier.
Par exemple, voici un fichier de filtre que j'ai écrit et qui capturera tout le trafic Web sortant de mon serveur Apache vers un hôte donné. Dans ce cas, le Chromebook sur lequel j'écris.
Tant que le fichier est lisible par l'utilisateur exécutant la commande tcpdump, le programme tentera d'analyser tout le contenu du fichier de filtre et de l'utiliser comme filtre valide. Lorsqu'un Le fichier de filtre est utilisé avec le filtrage de ligne de commande, tout filtrage de ligne de commande sera ignoré .
Demandez à tcpdump d'utiliser n'importe quel fichier de filtre donné en utilisant le -F option de ligne de commande, suivie du chemin d’accès au fichier. Dans l'exemple ci-dessus, le fichier de filtre se trouve dans le même répertoire dans lequel j'exécute tcpdump.
Voici le résultat brut de la capture de paquets de la session filtrée. Vous pouvez voir que les seuls paquets enregistrés proviennent de port 80 ou 443 , et sont sortants vers l'hôte au 192.168.1.181.
Une fois que vous voyez que votre filtre fonctionne comme prévu, capturez une session à analyser avec Wireshark à l'aide d'une commande similaire à celle-ci :
|_+_|Wireshark et tcpdump
À moins que vous n’utilisiez un commutateur géré avec un port d’administration, vous devrez tôt ou tard capturer le trafic sur un serveur distant. Lorsque Wireshark seul ne suffit pas, Wireshark avec tcpdump est un choix populaire. Les deux fonctionnent très bien ensemble et, avec quelques options simples de ligne de commande, tcpdump exportera des sessions de capture qui peuvent facilement être analysées dans Wireshark.
FAQ sur Wireshark tcpdump
Comment puis-je tcpdumpr une adresse IP ?
Le filtre hôte réduira le tcpdump au trafic pour une seule adresse IP, utilisez le hôte filtre. Cela doit être suivi de l’adresse IP. Par exemple, hôte tcpdump 192.168.0.10 . Pour réduire davantage la sortie, vous pouvez spécifier uniquement le trafic provenant de cette adresse IP avec le src option ou uniquement le trafic allant vers cette adresse IP avec le heure d'été option, par exemple : tcpdump src hôte 192.168.0.10 .
Comment utiliser tcpdump sur un port spécifique ?
Vous pouvez sélectionner tout le trafic pour un port spécifique avec un filtre sur la commande tcpdump. Cette méthode vous donnera également un trafic de protocole spécifique à condition que vous connaissiez le port utilisé pour ce protocole. Le filtre est port et il est possible de spécifier uniquement le trafic TCP ou UDP avec les options tcp et UDP . Exemples: tcpdump port 53 ou tcpdump port udp 53 .
Qu’est-ce que le protocole de capture de paquets à distance ?
Protocole de capture de paquets à distanceest un programme appelé RPCAPD.EXE. Ceci est implémenté en tant que démon et fait partie de WinPCap. Le démon Remote Packet Capture Protocol agit comme un agent sur un ordinateur, permettant de capturer des paquets à partir de celui-ci en fonction de commandes émises sur un autre ordinateur.
Pourquoi tcpdump ne capture-t-il pas les mots de passe comme ftp et ssh contrairement à Wireshark ?
Il est possible de capturer les mots de passe FTP avec tcpdump. Courir tcpdump -nn -v port ftp ou ftp-data et recherchez la sortie pour UTILISATEUR pour obtenir le nom d'utilisateur et PASSER pour obtenir le mot de passe. Même Wireshark ne déchiffrera pas une session SSH, y compris les informations de connexion, sans déjà connaître la clé utilisée pour chiffrer la connexion. Ni tcpdump ni Wireshark ne peuvent obtenir le nom d'utilisateur ou le mot de passe d'une session SFTP ou FTPS.