GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Linux tcpdump

tcpdump est un utilitaire de ligne de commande qui nous permet de capturer et d'analyser le trafic réseau passant par notre système. Selon les options de filtrage, nous pouvons utiliser cet outil pour aider efficacement à résoudre tout type de problème de réseau. C'est un outil très couramment utilisé par les ingénieurs sysadmin pour ces fonctionnalités.

Dans ce tutoriel, nous analyserons quelques-unes des façons d'utiliser tcpdump , mais pas tout. En effet, il y a tout simplement beaucoup trop d'options de filtrage impliquées dans cette commande, et il n'est pas possible de toutes les couvrir. Nous n'examinerons ici que certaines des options couramment utilisées. Vous pouvez trouver le reste sur la page de manuel.

Installation de la commande tcpdump

Vous pouvez vérifier si votre système a le tcpdump commande, en tapant

tcpdump --version

Si le résultat indique qu'il n'est pas installé, vous pouvez l'obtenir directement à l'aide du gestionnaire de packages de votre système.

REMARQUE  :Puisque nous allons capturer des paquets, nous avons besoin d'autorisations élevées. (sudo est requis). Nous allons préfixer tous les tcpdump commandes avec sudo en conséquence.

Répertorier les interfaces pour la capture de paquets

Avant de capturer activement des paquets, nous allons examiner les interfaces disponibles pour tcpdump .

Nous pouvons lister les interfaces en utilisant le -D (Affichage).

sudo tcpdump -D

Vous obtiendrez une liste de toutes les interfaces disponibles sur votre machine. Cela dépendra d'un système à l'autre, donc le mien a d'autres interfaces comme Docker , puisque le service Docker est en cours d'exécution, à l'exception des interfaces réseau classiques.

L'interface spéciale any permet de capturer dans tout interface active.

Maintenant que nous connaissons les interfaces disponibles sur notre machine, commençons à capturer les paquets !

Capturer des paquets à l'aide de tcpdump

Capturez tous les paquets dans tout interface en exécutant cette commande :

sudo tcpdump -i any

Cela spécifiera l'interface comme étant n'importe laquelle , l'interface spéciale mentionnée précédemment.

tcpdump continue de capturer des paquets jusqu'à ce qu'il reçoive une interruption signal. Vous pouvez interrompre la capture en appuyant sur Ctrl+C .

La sortie listera toutes les captures de paquets jusqu'à ce que le signal d'interruption soit reçu pour terminer tcpdump .

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:49:32.841984 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132693749:4132693857, ack 3344962610, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 108
10:49:32.842057 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
10:49:32.842101 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 144:260, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 116
10:49:32.842135 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 260:296, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
...
...
^C
264 packets captured
361 packets received by filter
91 packets dropped by kernel

Comme vous pouvez le constater, tcpdump avait capturé 264 paquets. Par exemple, puisque je suis connecté à ce serveur en utilisant ssh , tcpdump capturé tous ces paquets.

Limiter le nombre de captures de paquets

Pour limiter le nombre de paquets capturés et arrêter tcpdump , utilisez le -c option (limite de capture) :

sudo tcpdump -i any -c 2

Cela entraînera l'arrêt automatique de la capture de la commande tcpdump après 2 paquets. Nous n'aurons pas nécessairement besoin d'utiliser le signal d'interruption pour le terminer manuellement dans ce cas.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:57:31.284198 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132754245:4132754353, ack 3344963698, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 108
10:57:31.284275 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 36
2 packets captured
16 packets received by filter
8 packets dropped by kernel

Cette option peut être très utile pour surveiller les connexions réseau afin de résoudre tout problème, s'il y a des problèmes de réseau.

Désactiver la résolution de nom et de port

Par défaut, tcpdump La commande résout les adresses IP et les ports en noms (tels que vultr.com.ssh , qui effectue la résolution de nom à partir des adresses IP et des ports).

Lors du dépannage de problèmes de réseau, il est souvent plus simple d'utiliser les adresses IP et les numéros de port; Nous pouvons désactiver la résolution de nom en utilisant l'option -n et la résolution de port avec -nn .

sudo tcpdump -i any -c 2 -nn

La commande ci-dessus capture 2 paquets sur n'importe quelle interface, tout en désactivant la résolution de port.

Ainsi, la sortie arrêtera désormais toute résolution de nom et renverra simplement les adresses IP et les numéros de port.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108
11:00:36.459982 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 36
2 packets captured
8 packets received by filter
0 packets dropped by kernel

Ici, examinons une ligne de la sortie.

11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108

Il s'agit d'un TCP typique capture de paquets. D'autres paquets et formats de protocole peuvent être référencés dans la page de manuel de la commande tcpdump.

Le premier champ, 11:00:36.459922 , représente l'horodatage du paquet reçu selon l'horloge locale.

Ensuite, IP représente le protocole de couche réseau—dans ce cas, IPv4 . Pour IPv6 paquets, la valeur est IP6 .

Le champ suivant, 111.11.111.11.22 , est l'adresse IP source et le port. Ceci est suivi de l'adresse IP et du port de destination, représentés par 123.45.678.90.48006 .

Maintenant que nous connaissons le format de sortie de base, analysons quelques options de filtrage pour tcpdump

Filtrer les paquets

L'un des tcpdump les fonctionnalités les plus puissantes de la commande sont 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.

Filtrer en fonction du protocole

Pour filtrer les paquets en fonction du protocole, nous devons spécifier le protocole dans la commande.

Pour capturer ICMP paquets uniquement, nous pouvons filtrer en fonction de ICMP protocole.

sudo tcpdump -i any -c 5 icmp

Depuis le ping la commande utilise ICMP paquets, nous pouvons analyser les paquets entrants en raison du ping d'une autre machine.

Envoyons un ping à notre machine actuelle et capturons les paquets de ping entrants.

Ouvrez une session de terminal sur une autre machine et tapez

ping IP_ADDRESS_MACHINE_1

Maintenant, dans notre tcpdump session de terminal, nous pouvons maintenant voir qu'il capture ces paquets de réponse ping ICMP.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:18:47.947475 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 1, length 64
11:18:47.947554 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 1, length 64
11:18:48.947669 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 2, length 64
11:18:48.947752 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 2, length 64
11:18:49.947853 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 3, length 64
5 packets captured
6 packets received by filter
0 packets dropped by kernel

Ici, 123.45.678.90 est l'adresse IP de la machine (Machine 2) qui envoie le ping à notre tcpdump système et 111.11.111.11 est l'adresse IP de la machine de filtrage de paquets (Machine 1).

Depuis que j'utilisais ssh pour envoyer les requêtes ping, il existe une résolution de domaine (mais pas de résolution de nom) vers vultr.com .

Filtrer en fonction de l'hôte

Pour limiter la capture aux seuls paquets liés à un hôte spécifique, nous pouvons utiliser le host filtre

sudo tcpdump -i any -c5 -nn host 192.168.1.2

Dans cet exemple, tcpdump capture et affiche uniquement les paquets vers et depuis l'hôte 192.168.1.2 .

Filtrer en fonction du port

Pour filtrer les paquets en fonction du service ou du port souhaité, utilisez le port filtre. Par exemple, capturez les paquets liés à une session ssh en utilisant cette commande (port 22 filtrage):

sudo tcpdump -i any -c5 -nn port 22

Filtre basé sur l'adresse IP source/le nom d'hôte

Vous pouvez également filtrer les paquets en fonction de l'adresse IP source ou de destination ou du nom d'hôte. Par exemple, pour capturer des paquets depuis l'hôte 192.168.1.2

sudo tcpdump -i any -c 5 -nn src 192.168.1.2

Nous pouvons utiliser dst pour filtrer également par adresse IP/nom d'hôte de destination.

sudo tcpdump -i any -c 5 -nn src 172.168.1.2

Enregistrer les captures de paquets

Nous pouvons enregistrer les résultats des captures de paquets dans un fichier pour une analyse ultérieure.

Pour enregistrer les paquets dans un fichier au lieu de les afficher à l'écran, utilisez l'option -w :

sudo tcpdump -i any -c 5 -nn -w sample.pcap port 22

Cette commande enregistre la sortie dans un fichier nommé sample.pcap . Le .pcap l'extension signifie "capture de paquets" et est la convention pour ce format de fichier.

Conclusion

Dans ce didacticiel, nous avons appris comment effectuer la capture et le filtrage de paquets en fonction de différentes options, en utilisant le tcpdump commande.


Linux
  1. Comment capturer et analyser des paquets avec la commande tcpdump sous Linux

  2. Commande Linux mv

  3. Linux du command

  4. Commande IP Linux

  5. Commande cd Linux

Commande de date sous Linux

Commande W sous Linux

Commande Tcpdump sous Linux

À la commande sous Linux

Commande Df sous Linux

Analyseur de paquets :15 exemples de commandes TCPDUMP