tcpdump est un puissant analyseur de ligne de commande et Libpcap, une bibliothèque portable pour capturer le trafic réseau. Tcpdump imprime une description du contenu des paquets sur une interface réseau qui correspond à une expression booléenne. Il peut également être exécuté avec le commutateur -w, qui l'invoque pour enregistrer les données de lot dans un fichier pour une analyse ultérieure, et/ou avec l'indicateur -r, qui l'oblige à lire à partir du fichier de lot enregistré. Avec l'aide de cet utilitaire, vous pouvez intercepter et également analyser le trafic réseau qui passe par le PC sur lequel ce programme s'exécute.
J'aimerais parler dans ce sujet "installation et utilisation de tcpdump" de l'installation de tcpdump, ainsi que de son utilisation et de son utilisation.
Avec tcpdump vous pouvez :
- Vous pouvez déboguer des applications réseau.
- Vous pouvez déboguer le réseau ou l'équipement réseau en général.
Pour installer tcpdump sur debian / ubuntu / linux mint, vous devez exécuter :
# sudo apt-get install tcpdump
Pour installer tcpdump sur RedHat / CentOS / Fedora utilisez :
# sudo yum installer tcpdump
Pour installer tcpdump sur MacOS, utilisez.
# brew installe tcpdump
Utilisation de tcpdump.
Pour vérifier si tcpdump fonctionne pour nous, vous pouvez exécuter la commande :
# tcpdump -i eth0 port 80
Il y a pas mal de commutateurs pour utiliser l'utilitaire tcpdump lui-même, je vais donner une liste de ceux les plus courants :
Si vous avez besoin de savoir quels packages échangent les serveurs 21 (par exemple, votre_serveur_1 et votre_serveur_2), la commande est utilisée pour cela :
# tcpdump héberge votre_serveur_1 et votre_serveur_2
Si vous souhaitez surveiller uniquement les paquets sortants de l'hôte, exécutez :
# tcpdump src héberge votre_serveur
Si vous devez surveiller uniquement les paquets entrants de l'hôte, exécutez :
# tcpdump dst héberge votre_serveur
Vous pouvez également écouter les paquets sortants ou entrants du serveur et sur un port spécifique pour cela, ajoutez simplement le port que vous souhaitez écouter (la plupart du temps 80, 8080 sont utilisés).
Voir la liste des interfaces sur lesquelles tcpdumt peut écouter :
# tcpdump -D
Écouter l'interface eth0 :
# tcpdump -i eth0
Jouez sur n'importe quelle interface disponible (nécessite le noyau Linux 2.2 ou supérieur) :
# tcpdump -i tout
Tout afficher à l'écran (tout ce qui est fait par le programme) :
# tcpdump -v
Afficher beaucoup de choses à l'écran (tout ce qui est fait par le programme) :
# tcpdump -vv
Il y a beaucoup de sortie à l'écran (tout ce qui est fait par le programme):
# tcpdump -vvv
N'imprimez pas beaucoup d'informations lors de la capture de paquets (pas en standard) :
# tcpdump -q
Limitez la capture de paquets à 100 :
# tcpdump -c 100
Écrivez toutes les données (paquets capturés) dans un fichier nommé capture.cap :
# tcpdump -w capture.cap
Écrivez toutes les données (paquets capturés) dans un fichier nommé capture.cap et affichez-le en temps réel :
# tcpdump -v -w capture.cap
Sortie des paquets du fichier capture.cap :
# tcpdump -r capture.cap
Sortir les paquets du fichier capture.cap en utilisant autant d'informations que possible :
# tcpdump -vvv -r capture.cap
Sortant l'IP et les ports au lieu des domaines, la capture de paquets est en cours :
# tcpdump -n
Capturez tous les paquets dont l'hôte de destination est 192.138.1.1. Sortie IP et ports sur l'écran :
# tcpdump -n hôte dst 192.138.1.1
# tcpdump -n src hôte 192.138.1.1
Capturez tous les paquets de l'hôte 192.138.1.1. Sortie IP et ports sur l'écran :
# tcpdump -n hôte 192.138.1.1
Capturez les paquets où le réseau est 192.138.1.0/24. Sortie IP et ports sur l'écran :
# tcpdump -n dst net 192.138.1.0/24
# tcpdump -n src net 192.138.1.0/24
Capturez les paquets du réseau 192.138.1.0/24. Sortie IP et ports sur l'écran :
# tcpdump -n net 192.138.1.0/24
Capturez les paquets du port 23. Affichage de l'IP et des ports à l'écran :
# tcpdump -n dst port 23
Capturez les paquets des ports 1 à 1023. Affichage de l'IP et des ports à l'écran :
# tcpdump -n dst plage de port 1-1023
Capturez uniquement les paquets TCP dont la destination est sur les ports 1 à 1023. Affichage de l'IP et des ports à l'écran :
# tcpdump -n tcp dst plage de port 1-1023
Capturez uniquement les paquets UDP dont la destination est sur les ports 1 à 1023. Affichage de l'IP et des ports à l'écran :
# tcpdump -n udp dst plage de port 1-1023
Capturez les paquets de la destination où l'IP est 192.138.1.1 et le port de destination est 23. Affichage :
# tcpdump -n "dst host 192.138.1.1 et dst port 23"
Capturez les paquets depuis la destination où IP 192.138.1.1 et la destination sur les ports 80 ou 443. Affichage :
# tcpdump -n "dst host 192.138.1.1 et (dst port 80 ou dst port 443)"
Capturez tous les paquets ICMP :
# tcpdump -v icmp
Capturez tous les paquets ARP :
# tcpdump -v arp
Capturez tous les paquets ICMP ou ARP :
# tcpdump -v "icmp ou arp"
Capturez tous les paquets diffusés ou multicast :
# tcpdump -n "diffusion ou multidiffusion"
Capture de gros paquets (500 octets) et non standard 68b :
# tcpdump -s 500
Capturez tous les octets de données dans un paquet :
# tcpdump -s 0
Affichage des "colis lourds" :
# tcpdump -nnvvXSs 1514
Capture de paquets ICMP avec ping et pong :
# tcpdump -nnvXSs 0 -c2 icmp
Conclusion sans beaucoup d'options :
# tcpdump -nS
Communications de base (mode très verbeux), vous pouvez voir une bonne quantité de trafic, avec de la verbosité :
# tcpdump -nnvvS
Un examen plus approfondi du trafic, en ajoutant -X pour la charge utile :
# tcpdump -nnvvXS
Parcourez le package lourd et augmentez la longueur instantanée en saisissant l'ensemble du package :
# tcpdump -nnvvXSs 1514
Vous pouvez également filtrer en fonction de parties spécifiques du package, ainsi que combiner plusieurs conditions en groupes. Ceci est utile lorsque vous recherchez uniquement des SYN ou PCT, par exemple, et ce dernier pour une isolation du trafic encore plus avancée.
Montrez-moi tous les packages URGENT (URG) :
# tcpdump "tcp & 32! = 0"
Montrez-moi tous les paquets ACKNOWLEDGE (ACK) :
# tcpdump "tcp & 16! = 0"
Montrez-moi tous les packages PUSH (PSH) :
# tcpdump "tcp & 8! = 0"
Montrez-moi tous les packages RESET (RST) :
# tcpdump "tcp & 4! = 0"
Montrez-moi tous les paquets SYNCHRONIZE (SYN) :
# tcpdump "tcp & 2! = 0"
Montrez-moi tous les paquets FINISH (FIN) :
# tcpdump "tcp & 1! = 0"
Montrez-moi tous les paquets SYNCHRONIZE / ACKNOWLEDGE (SYNACK):
# tcpdump "tcp = 18"
Capture d'indicateurs TCP à l'aide de tcpflags :
# tcpdump "tcp & & tcp-syn! = 0"
Paquets avec les drapeaux RST et SYN (vérifier) :
# tcpdump "tcp = 6"
Trafic « Evil Bit » (vérifier) :
# tcpdump "ip & 128! = 0"
Ceci conclut mon article "installer et utiliser tcpdump", j'espère que tout est clair et compréhensible.
L'utilitaire tcpdump est un outil très puissant et populaire pour capturer et analyser les paquets réseau. Il vous permet de visualiser tous les paquets entrants et sortants à partir d'une interface spécifique et fonctionne à partir de la ligne de commande. Bien sûr, vous pouvez utiliser Wirshark pour analyser les paquets réseau, c'est un utilitaire graphique, mais il y a parfois des situations où vous n'avez besoin de travailler que dans le terminal.
Tcpdump n'est pas pire que Wireshark et possède toutes les capacités nécessaires pour l'analyse des paquets. De plus, vous pouvez enregistrer tous les paquets capturés dans un fichier pour les analyser plus tard en utilisant le même Wireshark. Dans cet article, nous verrons comment utiliser tcpdump pour capturer des paquets réseau.
De nombreuses distributions sont livrées avec la commande tcpdump par défaut, mais si votre distribution ne l'a pas, vous pouvez très facilement l'installer à partir des référentiels officiels. Par exemple, sur Ubuntu/Debian :
sudo apt installer tcpdum p
Sur Fedora / Red Hat / CentOS :
sudo yum installer tcpdump
Une fois l'installation terminée, vous pouvez vous mettre au travail.
Commande Tcpdump
Avant de passer aux exemples d'utilisation de l'utilitaire, examinons sa syntaxe et ses options de base. La commande a la syntaxe suivante :
$ tcpdump options -i filtres d'interface
Lors de l'appel, assurez-vous de passer l'interface que vous surveillerez. Si l'interface n'est pas spécifiée, la première de la liste sera utilisée. Les options personnalisent l'affichage et les fonctionnalités de base de l'utilitaire, et les filtres vous permettent de filtrer les packages indésirables. Voyons maintenant les principales options :
- -UNE- sortie de tous les paquets au format ASCII ;
- -c- fermer le programme après avoir intercepté le n-ième nombre de paquets ;
- -C- lors de l'écriture de packages dans un fichier, vérifiez la taille du fichier, et si elle est plus grande que celle spécifiée, créez un nouveau fichier ;
- -RÉ- afficher une liste des interfaces réseau disponibles ;
- -e- afficher les informations de niveau de connexion pour chaque paquet, cela peut être utile, par exemple, pour afficher l'adresse MAC ;
- -F- afficher le nom de domaine pour les adresses IP ;
- -F- lire les packages à partir d'un fichier, pas d'une interface ;
- -G- créer un nouveau fichier journal après une période de temps spécifiée ;
- -H- détecter les en-têtes 802.11s ;
- -je- nom de l'interface de capture des paquets. Vous pouvez capturer des paquets de toutes les interfaces en spécifiant n'importe laquelle ;
- -JE- basculer l'interface en mode moniteur pour capturer tous les paquets qui passent ;
- -j- définir le format d'horodatage pour l'enregistrement des paquets ;
- -J- voir l'horodatage disponible ;
- -K- ne pas vérifier les sommes de contrôle des paquets ;
- -l- ajouter un support de défilement à la sortie ;
- -L- afficher les protocoles de connexion pris en charge pour l'interface ;
- -n- ne pas afficher les noms de domaine ;
- -r- lire les packages à partir d'un fichier créé avec -w ;
- -v, -vv, -vvv- sortie plus détaillée;
- -q- afficher un minimum d'informations ;
- -w- écrire la sortie dans un fichier ;
- -Z- l'utilisateur au nom duquel les fichiers seront créés.
Ce ne sont pas toutes des options, mais elles vous suffiront pour la plupart des tâches. Le plus souvent, nous appliquerons des filtres. À l'aide de filtres, vous pouvez filtrer uniquement les types de paquets que vous souhaitez voir. Vous pouvez filtrer par adresse IP, protocole, réseau, interface et de nombreux autres paramètres. Mais nous allons considérer les filtres tcpdump par des exemples.
Comment utiliser tcpdump
Avant de passer à l'utilisation de tcpdump, vous devez examiner les interfaces réseau que vous pouvez utiliser. Pour ce faire, exécutez la commande avec l'option -D :
Commençons par regarder des exemples de tcpdump en capturant le trafic sur l'interface eth0, pour moi c'est l'interface principale qui est connectée à Internet. Le programme a besoin des droits de superutilisateur pour fonctionner, alors n'oubliez pas de spécifier sudo :
sudo tcpdump -i eth0
Pour arrêter la commande, appuyez sur Ctrl + C. Dans la sortie, vous verrez immédiatement tous les paquets capturés. Le format d'enregistrement de chaque paquet ressemblera à ceci :
13 : 03 : 41.795599 IP udp032919uds.hawaiiantel.net.6881> 192.168.1.2.52055 : Drapeaux [.], Seq 640160396 : 640161844, ack 436677393, win 2050, options, longueur 1448
Ce format est typique des paquets de données, selon le protocole, le texte surligné en noir sera différent. Vient d'abord l'horodatage, puis le protocole, puis l'adresse IP de l'expéditeur est marquée en vert, et l'adresse du destinataire en bleu, dans ce cas, notre ordinateur. Ensuite, il y a des paramètres tcp supplémentaires et à la fin la taille du paquet en octets. La verbosité de la sortie peut être contrôlée avec les options -v, par exemple :
sudo tcpdump -v -i eth0
Il y a déjà des informations sur le protocole IP ici :
IP (tos 0x0, ttl 64, id 50309, décalage 0, drapeaux, proto TCP (6), longueur 64)
Nous pouvons trouver des informations sur la durée de vie du paquet TTL, la version TCP et la longueur du champ d'en-tête. L'option -vv imprimera la vérification de la somme de contrôle du package et son contenu dans certains cas.
Après les options, vous pouvez spécifier des filtres pour les packages. Voici les principaux paramètres par lesquels vous pouvez filtrer les paquets :
- hôte- nom d'hôte ;
- ip- adresse IP;
- proto- protocole ;
- rapporter- adresse réseau ou sous-réseau ;
- Port- l'adresse du port ;
- src- paramètre concernant l'expéditeur ;
- dst- paramètre concernant le destinataire ;
- Les protocoles suivants sont disponibles : éther, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp et UDP.
Vous pouvez combiner tout cela entre eux pour obtenir le résultat souhaité. Regardons de plus près les exemples. Filtrons uniquement les paquets adressés à notre ordinateur :
sudo tcpdump -i eth0 ip dst 192.168.1.2
Nous pouvons également sélectionner des paquets envoyés à un nœud spécifique :
sudo tcpdump -i eth0 hôte dst google-public-dns-a.google.com
Comme vous pouvez le voir, ce sont des paquets DNS et ici, au lieu de drapeaux TCP, il y a des informations utiles, une demande d'adresse IP de l'hôte. Vous pouvez également sélectionner des paquets de réponse à partir d'un hôte spécifique :
sudo tcpdump -i eth0 hôte src google-public-dns-a.google.com
Le contenu complet du package n'est pas ici, si vous voulez l'obtenir, vous devez utiliser l'option -v ou -vv :
sudo tcpdump -vv -i eth0 hôte dst google-public-dns-a.google.com
Avec l'opérateur and, vous pouvez combiner plusieurs filtres en un seul :
sudo tcpdump -i eth0 hôte dst google-public-dns-a.google.com et hôte src google-public-dns-a.google.com
Les deux et et ou sont disponibles à partir des opérations de jointure, et les parenthèses peuvent également être utilisées pour indiquer la priorité. Vous n'avez pas besoin de spécifier l'hôte, dans de nombreux cas src ou dst suffisent, l'utilitaire lui-même comprendra ce que cela signifiait. La même conception exacte peut être utilisée pour les ports. Par exemple, nous pouvons filtrer toutes les requêtes ou réponses au DNS (sur le port 53) :
sudo tcpdump -vv -i eth0 port 53
Exactement la même chose peut être fait pour http (port 80):
sudo tcpdump -vv -i eth0 port 80
Naturellement, vous pouvez également utiliser ici dst et src pour des résultats plus spécifiques. Vous pouvez filtrer non pas un port, mais toute une gamme de ports :
sudo tcpdump portrange 21-23
Si vous spécifiez l'un des protocoles, vous filtrerez uniquement les paquets de ce protocole, par exemple tcp, udp ou arp :
sudo tcpdump -vv arp
De même, vous pouvez sélectionner tous les packages udp :
sudo tcpdump -vv udp
Un filtre par désignation de réseau est également disponible :
sudo tcpdump net 129.168.1.1/24
Vous pouvez également filtrer les paquets en fonction de leur taille, par exemple, moins de 32 octets :
sudo tcpdump moins 32
Ou plus de 128 :
tcpdump supérieur à 128
sudo tcpdump -i eth0 -w fichier.pcap
Ce fichier peut être ouvert avec n'importe quel programme pour lire de tels fichiers, par exemple, Wireshark. Pour ouvrir les packages enregistrés dans un fichier, utilisez l'option -r :
sudo tcpdump -r fichier.pcap
Il y a encore une chose à laquelle il faut prêter attention. Il s'agit du format d'affichage du contenu des packages. Vous pouvez afficher le contenu d'un package au format ASCII à l'aide de l'option -A :
sudo tcpdump -A -i eth0
Vous pouvez également afficher du contenu au format HEX et ASCII en utilisant -XX pour cela :
sudo tcpdump -XX -i eth0
conclusions
Dans cet article, nous avons expliqué comment utiliser tcpdump. C'est un analyseur de réseau très puissant qui ne fonctionne que via la ligne de commande. J'espère que ces informations vous ont été utiles et que maintenant utiliser tcpdump sera beaucoup plus facile, si vous avez encore des questions, posez-les dans les commentaires !
Pour terminer la vidéo de la conférence tcpdump :
La commande tcpdump est également appelée renifleur de paquets.
La commande tcpdump fonctionnera sur la plupart des versions du système d'exploitation UNIX. tcpdump nous permet de sauvegarder les paquets capturés afin que nous puissions utiliser le paquet capturé pour une analyse plus approfondie. Le fichier enregistré peut être visualisé avec la même commande tcpdump. Nous pouvons également utiliser un logiciel open source comme Wireshark pour lire les fichiers tcpdump PCAP.
Dans ce tutoriel, nous allons passer en revue quelques exemples pratiques d'utilisation de la commande tcpdump.
1. Capture de paquets à partir d'une interface LAN spécifique à l'aide de tcpdump -i
Lors de l'exécution de tcpdump sans aucune option, il capture tous les paquets passant par toutes les interfaces. Option -je commande tcpdump, permet de filtrer sur une interface Ethernet spécifique.
$ tcpdump -i eth1 12: 59: 41.967250 ARP, Request who-has free.msk.ispsystem.net tell gw.msk.ispsystem.net, longueur 46 12: 59: 41.967257 ARP, Request who-has reserve.scoffserver.ru dites à gw.msk.ispsystem.net, longueur 46 12 : 59 : 41..44141> wdc-ns1.ispsystem.net.domain : 14799+ PTR ? 184.48.146.82.in-addr.arpa. (44) ...
Dans cet exemple, tcpdump capture tous les paquets du flux sur l'interface eth1 et les affiche sur la sortie standard.
Noter:
L'utilitaire Editcap est utilisé pour sélectionner ou supprimer des packages spécifiques d'un fichier de vidage et les traduire dans un format spécifié.
2. Capturez uniquement le N-ième nombre de paquets avec tcpdump -c
Lorsque vous exécutez la commande tcpdump, elle vous fournit des packages jusqu'à ce que vous annuliez la commande tcpdump. Utilisation de l'option -c vous pouvez spécifier le nombre de paquets à capturer.
$ tcpdump -c 2 -i eth0 écoute sur eth0, type de lien EN10MB (Ethernet), taille de capture 65535 octets 13 : 01 : 35.165898 ARP, Request who-has 213.159.211.80 tell gw.msk.ispsystem.net, longueur 46 13 : 01: 35..35123> wdc-ns1.ispsystem.net.domain: 7254+ PTR ? 80.211.159.213.in-addr.arpa. (45) 2 paquets capturés 7 paquets reçus par le filtre 0 paquets abandonnés par le noyau
Commande Tcpdump capturé seulement 2 paquets de l'interface eth0.
Noter:
Mergecap et TShark : Mergecap est un outil de fusion de vidage de packages qui combinera plusieurs packages en un seul fichier de vidage. Tshark est un puissant outil de capture de paquets réseau qui peut être utilisé pour analyser le trafic réseau. Il est livré avec Wireshark Network Distribution Analyzer.
3. Affichez les paquets capturés en ASCII en utilisant tcpdump -a
La syntaxe tcpdump suivante imprime le paquet en ASCII.
$ tcpdump -A -i eth0 13: 03: 06.516709 IP 213.132.93.178..vlsi-lm: Flags [.], ack 3120779210, win 254, length 0 E .. ( [email protégé]] ..... b ... %. = ... O.P ....... 13 : 03 : 06..35313> wdc-ns1.ispsystem.net.domain : 13562+ PTR ? 178.93.132.213.in-addr.arpa. (45) [email protégé]@ ........ x ..... 5.5 [filtres]
Dans la documentation officielle (commande man tcpdump), vous pouvez trouver plusieurs exemples d'utilisation de cet utilitaire pour différents cas, en utilisant des filtres assez divers et complexes.
Il est également important de noter que tcpdump (et en fait tous les analyseurs de paquets) pendant son fonctionnement peut générer d'énormes quantités d'informations et charger considérablement le réseau, jusqu'à et y compris des défaillances dans son fonctionnement. Par conséquent, lors de l'analyse du trafic, vous devez utiliser une approche rationnelle - en fonction de la situation et des conditions de la tâche (ou du problème), utilisez des filtres, d'autant plus qu'il s'agit d'une partie très efficace de la fonctionnalité tcpdump.
Les commutateurs les plus couramment utilisés lors de l'exécution de tcpdump sont indiqués dans le tableau
clé |
la description |
Convertit les adresses réseau et de diffusion en noms de domaine. |
|
Affiche les données de la couche liaison (adresse MAC, protocole, longueur de paquet). En plus des adresses IP, les adresses MAC des ordinateurs seront affichées. |
|
Utilisez le filtre fourni dans le fichier. Si vous utilisez ce paramètre, le filtre de la ligne de commande sera ignoré. |
|
Indique quelle interface réseau sera utilisée pour capturer les paquets. La valeur par défaut est eth0, pour sélectionner toutes les interfaces est any. S'il n'y a pas de réseau local, vous pouvez utiliser l'interface de bouclage lo. |
|
Utilisez la sortie de flux standard de tcpdump (stdout), par exemple pour écrire dans un fichier : shell # tcpdump -l | tee out.log // affichera l'opération tcpdump et enregistrera le résultat dans le fichier out.log |
|
N'ajoute pas d'extension de domaine aux noms d'hôtes. Par exemple, tcpdump affichera 'net' au lieu de 'net.library.org' |
|
Affiche l'adresse IP au lieu du nom d'hôte. |
|
Affiche le numéro de port au lieu du protocole qu'il utilise. |
|
Ne met pas l'interface en mode promiscuité. |
|
Affiche un minimum d'informations. Il s'agit généralement du nom du protocole, d'où provient le paquet et d'où, des ports et de la quantité de données transférées. |
|
Cette option permet à tcpdump de lire le trafic d'un fichier s'il a été précédemment enregistré avec l'option -w. |
|
Permet de ne pas transformer les numéros de séquence absolus (numéros de séquence initiaux - ISN) en numéros relatifs. |
|
Le nombre d'octets de paquets que tcpdump traitera. Si vous définissez un grand nombre d'octets à afficher, les informations peuvent ne pas tenir sur l'écran et peuvent être difficiles à étudier. Selon les objectifs que vous poursuivez, vous devez choisir la valeur de ce paramètre. Par défaut, tcpdump capture les 68 premiers octets (au moins 96 octets pour SunOS), mais si vous voulez voir le contenu de l'intégralité du paquet, utilisez 1514 octets (la taille de trame maximale sur Ethernet). |
|
N'affiche pas l'horodatage sur chaque ligne. |
|
Interpréter des paquets d'un type donné. Les types aodv, cnfp, rpc, rtp, rtcp, snmp, tftp, vat, wb sont pris en charge. |
|
Affiche un horodatage non formaté sur chaque ligne. |
|
Affiche l'heure avec la date. |
|
Sortie d'informations détaillées (TTL ; ID ; longueur totale de l'en-tête, ainsi que ses paramètres ; vérifie les sommes de contrôle des en-têtes IP et ICMP) |
|
La sortie est encore plus complète, principalement liée à NFS et SMB. |
|
Affichage des informations les plus détaillées. |
|
Enregistre les données tcpdump au format binaire. Les avantages de l'utilisation de cette méthode par rapport à la redirection de fichiers classique sont la vitesse d'écriture élevée et la possibilité de lire des données similaires par d'autres programmes, tels que snort, mais ce fichier ne peut pas être lu par des humains. Il est possible de sortir des données binaires vers la console, pour cela vous devez utiliser -w - |
|
Fait une liste hexadécimale du paquet, utile pour analyser le paquet plus en détail. La quantité de données affichée dépend de l'option -s |
|
-X mais inclut un en-tête de couche de liaison |
|
Sort le paquet au format ASCII et hexadécimal. Il est utile en cas d'analyse d'un incident de piratage, car il permet de visualiser quelles informations textuelles ont été transmises lors de la connexion. |
|
Identique au paramètre précédent -X mais inclut un en-tête de couche de liaison. |
|
tcpdump se fermera après avoir reçu le nombre de paquets spécifié. |
|
Les packages collectés seront immédiatement ajoutés à un fichier, sinon ils s'accumuleront en mémoire jusqu'à épuisement |
Filtres Tcpdump
Les filtres sont divisés dans les classifications suivantes
hôte- Adresse de l'hôte
Port- le port sur lequel vous voulez récupérer les paquets
portrange - plage de ports
rapporter- réseau
Tcpdump net 192.168.0.0/24
capture de tout le trafic dont la source ou la destination sont des adresses IP du réseau 192.168.0.0/24
Tcpdump port 80
Tout le trafic sur le port 80 sera capturé.
Sens du trafic par rapport à l'objet de surveillance
src- expéditeur
dst- destinataire
par exemple la commande
Hôte Src 172.31.25.200
Capture du trafic à partir duquel l'adresse IP de l'expéditeur est 172.31.25.200
Protocole
éther- technologie de réseau de base Ethernet, indique généralement que l'adresse MAC matérielle est utilisée dans le filtre
ip- Protocole IPv4
ip6- Protocole IPv6
arp- Protocole ARP
tcp- Protocole TCP
UDP- Protocole UDP
Si aucun protocole n'est spécifié, le trafic pour tous les protocoles sera capturé
Par exemple la commande
Port Udp 5060
capture de trafic via le port de protocole udp 5060
Filtres composites
Afin de filtrer le trafic de manière plus flexible, vous pouvez utiliser des opérations logiques
"Et et (&&)
"OU" - ou (||)
"NON" - pas (!) - inversion de valeur
Par ailleurs, la priorité de ces opérations est la suivante :
l'opération d'inversion a la priorité la plus élevée
puis un "ET" logique
la priorité la plus basse est l'opération OU.
La priorité des opérations peut être modifiée à l'aide de parenthèses.
(net 172.16.0.0/24 ou hôte 172.31.0.5) et port tcp 80
capturer le trafic TCP et utiliser le port 80 appartenant au réseau 172.16.0.0/24 ou à l'hôte 172.31.0.5, soit vers n'importe quel hôte individuellement ou ensemble
(net 172.16.0.0/24 || hôte 172.31.0.5) && pas tcp port 80
capturer tout trafic à l'exception du trafic TCP et utiliser le port 80 appartenant au réseau 172.16.0.0/24 ou à l'hôte 172.31.0.5 individuellement ou ensemble
exemples linux tcpdump
Écriture de la sortie dans un fichier
$ sudo tcpdump -w sshtrace.tcpdump tcp port 22
Le fichier sshtrace.tcpdump sera créé par défaut dans le répertoire home de l'utilisateur courant. Pour afficher les informations du fichier myrouter.tcpdump, utilisez l'option -r :
$ tcpdump -r sshtrace.tcpdump
Supprimer tout le trafic de l'interface eth1
$ tcpdump –i eth1
Supprimer le trafic d'une plage de ports sur l'interface eth1
$ tcpdump -i eth1 plage de port 100-200
tout le trafic allant à 172.16.0.1 qui n'est pas ICMP.
Si vous avez besoin d'analyser ou d'intercepter des paquets réseau sous Linux, il est préférable d'utiliser l'utilitaire de console pour cela. tcpdump... Mais le problème se pose dans sa gestion assez complexe. Un utilisateur ordinaire pensera que travailler avec l'utilitaire n'est pas pratique, mais ce n'est qu'à première vue. L'article vous expliquera comment fonctionne tcpdump, quelle syntaxe il a, comment l'utiliser, et donnera également de nombreux exemples de son utilisation.
Lire aussi : Guides pour configurer la connexion Internet dans Ubuntu, Debian, Ubuntu Server
La plupart des développeurs de systèmes d'exploitation basés sur Linux incluent l'utilitaire tcpdump comme préinstallé, mais si pour une raison quelconque il n'est pas dans votre distribution, vous pouvez toujours le télécharger et l'installer via "Terminal"... Si votre système d'exploitation est basé sur Debian, et qu'il s'agit d'Ubuntu, Linux Mint, Kali Linux et autres, vous devez exécuter cette commande :
sudo apt installer tcpdump
Lors de l'installation, vous devez entrer un mot de passe. Veuillez noter qu'il ne s'affiche pas lors de la saisie ; vous devez également entrer le symbole pour confirmer l'installation "RÉ" et appuyez sur Entrer.
Si vous avez Red Hat, Fedora ou CentOS, la commande d'installation ressemblera à ceci :
sudo yam installer tcpdump
Une fois l'utilitaire installé, vous pouvez l'utiliser immédiatement. Ceci et bien d'autres seront discutés plus loin dans le texte.
Syntaxe
Comme toute autre commande, tcpdump a sa propre syntaxe. Le sachant, vous pouvez définir tous les paramètres nécessaires qui seront pris en compte lors de l'exécution de la commande. La syntaxe est la suivante :
options de tcpdump -i filtres d'interface
Lorsque vous utilisez la commande, vous devez vous assurer de spécifier l'interface de suivi. Les filtres et les options sont des variables facultatives, mais ils permettent une personnalisation plus flexible.
Options
Bien que vous n'ayez pas besoin de spécifier une option, vous devez quand même répertorier celles disponibles. Le tableau ne montre pas toute leur liste, mais seulement les plus populaires, mais ils sont plus que suffisants pour résoudre la plupart des tâches.
Option | Définition |
---|---|
-UNE | Permet de trier les paquets au format ASCII |
-l | Ajoute une fonction de défilement |
-je | Après avoir entré, vous devez spécifier l'interface réseau qui sera surveillée. Pour démarrer le suivi de toutes les interfaces, entrez le mot « any » après l'option |
-c | Termine le processus de suivi après avoir vérifié le nombre de paquets spécifié |
-w | Génère un fichier texte avec un rapport de validation |
-e | Affiche le niveau de connexion Internet du paquet de données |
-L | Sort uniquement les protocoles pris en charge par l'interface réseau spécifiée |
-C | Crée un autre fichier lors de l'écriture d'un lot si sa taille est supérieure à celle spécifiée |
-r | Ouvre un fichier en lecture qui a été créé avec l'option -w |
-j | Le format TimeStamp sera utilisé pour enregistrer les paquets |
-J | Vous permet d'afficher tous les formats d'horodatage disponibles |
-G | Sert à créer un fichier avec les journaux. L'option nécessite également de spécifier une valeur temporaire, après quoi un nouveau journal sera créé. |
-v, -vv, -vvv | Selon le nombre de caractères dans l'option, la sortie de la commande deviendra plus détaillée (augmentation directement proportionnelle au nombre de caractères) |
-F | La sortie affiche le nom de domaine des adresses IP |
-F | Vous permet de lire les informations non pas à partir de l'interface réseau, mais à partir du fichier spécifié |
-RÉ | Montre toutes les interfaces réseau qui peuvent être utilisées |
-n | Désactive l'affichage des noms de domaine |
-Z | Spécifie l'utilisateur sous le compte duquel tous les fichiers seront créés |
-K | Ignorer l'analyse de la somme de contrôle |
-q | Démonstration de brèves informations |
-H | Permet de détecter les en-têtes 802.11s |
-JE | Utilisé lors de la capture de paquets en mode moniteur |
Après avoir analysé les options, un peu ci-dessous, nous irons directement à leurs applications. En attendant, nous allons examiner les filtres.
Filtres
Comme mentionné au tout début de cet article, vous pouvez ajouter des filtres à la syntaxe tcpdump. Les plus populaires d'entre eux seront désormais considérés :
Tous les filtres ci-dessus peuvent être combinés les uns avec les autres, ainsi, en émettant une commande, vous observerez uniquement les informations que vous souhaitez voir. Pour comprendre plus en détail l'utilisation des filtres ci-dessus, il convient de donner des exemples.
Exemples d'utilisation
Les variations de syntaxe tcpdump fréquemment utilisées seront maintenant présentées. Il ne sera pas possible de tous les lister, car il peut y avoir une infinité de leurs variantes.
Affichage de la liste des interfaces
Il est recommandé à chaque utilisateur de vérifier dans un premier temps la liste de toutes ses interfaces réseau pouvant être tracées. D'après le tableau ci-dessus, nous savons utiliser l'option -RÉ donc dans le terminal, exécutez la commande suivante :
Comme vous pouvez le voir, il y a huit interfaces dans l'exemple qui peuvent être visualisées à l'aide de la commande tcpdump. L'article fournira des exemples avec ppp0, vous pouvez utiliser n'importe quel autre.
Capture normale du trafic
Si vous devez suivre une interface réseau, vous pouvez le faire en utilisant l'option -je... N'oubliez pas de préciser le nom de l'interface après l'avoir saisi. Voici un exemple d'exécution d'une telle commande :
sudo tcpdump -i ppp0
Remarque : avant la commande elle-même, vous devez saisir « sudo », car cela nécessite des droits de superutilisateur.
Remarque : après avoir appuyé sur Entrée, le "Terminal" affichera en permanence les paquets capturés. Pour arrêter leur flux, vous devez appuyer sur la combinaison de touches Ctrl + C.
Si vous exécutez la commande sans options ni filtres supplémentaires, vous verrez le format suivant pour afficher les paquets suivis :
22 : 18 : 52.597573 IP vrrp-topf2.p.mail.ru.https> 10.0.6.67.35482 : Drapeaux, seq 1 : 595, ack 1118, win 6494, options, longueur 594
Où la couleur est mise en évidence :
- bleu - l'heure à laquelle le colis a été reçu ;
- vert - l'adresse de l'expéditeur ;
- violet - l'adresse du destinataire;
- gris - informations supplémentaires sur tcp;
- rouge - taille du paquet (affichée en octets).
Cette syntaxe a la capacité de sortir dans une fenêtre "Terminal" sans utiliser d'options supplémentaires.
Capture de trafic avec l'option -v
Comme vous le savez d'après le tableau, l'option -v permet d'augmenter la quantité d'informations. Prenons un exemple. Vérifions la même interface :
sudo tcpdump -v -i ppp0
Ici, vous pouvez voir que la ligne suivante apparaît dans la sortie :
IP (tos 0x0, ttl 58, id 30675, décalage 0, drapeaux, proto TCP (6), longueur 52
Où la couleur est mise en évidence :
- orange - version du protocole ;
- bleu - durée de vie du protocole ;
- vert - la longueur de l'en-tête du champ ;
- violet - version du paquet TCP ;
- rouge - taille du paquet.
Également dans la syntaxe de la commande, vous pouvez écrire l'option -vv ou -vvv, ce qui augmentera encore la quantité d'informations affichées à l'écran.
Les options -w et -r
Le tableau des options mentionnait la possibilité d'enregistrer toutes les données de sortie dans un fichier séparé afin que vous puissiez les visualiser plus tard. L'option en est responsable. -w... C'est assez simple à utiliser, il suffit de le spécifier dans la commande, puis d'entrer le nom du futur fichier avec l'extension ".Pcap"... Considérons tout avec un exemple :
sudo tcpdump -i ppp0 -w fichier.pcap
Attention : lors de l'écriture des logs dans un fichier, aucun texte ne s'affiche sur l'écran du Terminal.
Lorsque vous souhaitez afficher la sortie enregistrée, vous devez utiliser l'option -r, après quoi écrivez le nom du fichier précédemment enregistré. Il est appliqué sans autres options et filtres :
sudo tcpdump -r fichier.pcap
Ces deux options sont idéales lorsque vous devez enregistrer de grandes quantités de texte pour une analyse ultérieure.
Filtrage IP
Nous savons d'après la table de filtrage que dst vous permet d'afficher sur l'écran de la console uniquement les paquets reçus par l'adresse spécifiée dans la syntaxe de la commande. Cela rend très pratique la visualisation des colis reçus par votre ordinateur. Pour cela, il vous suffit de préciser votre adresse IP dans la commande :
sudo tcpdump -i ppp0 ip dst 10.0.6.67
Comme vous pouvez le voir, en plus de dst, dans la commande, nous avons également ajouté un filtre ip... En d'autres termes, nous avons dit à l'ordinateur de faire attention à son adresse IP lors de la sélection des paquets, et non à d'autres paramètres.
Vous pouvez également filtrer les paquets sortants par IP. Dans l'exemple, nous donnerons à nouveau notre IP. C'est-à-dire que nous allons maintenant suivre quels paquets sont envoyés de notre ordinateur vers d'autres adresses. Pour ce faire, exécutez la commande suivante :
sudo tcpdump -i ppp0 ip src 10.0.6.67
Comme vous pouvez le voir, dans la syntaxe de la commande, nous avons modifié le filtre dst au src, indiquant ainsi à la machine de rechercher l'expéditeur par IP.
Filtrage par HTE
Par analogie avec IP dans la commande, on peut spécifier un filtre hôte pour filtrer les paquets avec l'hôte d'intérêt. C'est-à-dire que dans la syntaxe, au lieu de l'adresse IP de l'expéditeur / du destinataire, vous devrez spécifier son hôte. Cela ressemble à ceci :
sudo tcpdump -i ppp0 hôte dst google-public-dns-a.google.com
L'image montre que dans "Terminal" seuls les paquets envoyés depuis notre adresse IP à l'hôte google.com sont affichés. Comme vous pouvez le comprendre, au lieu de l'hôte google, vous pouvez en saisir un autre.
Comme pour le filtrage IP, dans la syntaxe dst peut être remplacé par src pour voir les paquets qui sont envoyés à votre ordinateur :
sudo tcpdump -i ppp0 hôte src google-public-dns-a.google.com
Attention : le filtre hôte doit venir après dst ou src, sinon la commande générera une erreur. Dans le cas du filtrage IP, en revanche, dst et src précèdent le filtre ip.
Application du filtre et et ou
Si vous devez utiliser plusieurs filtres à la fois dans une commande, alors pour cela, vous devez appliquer le filtre et ou ou(selon les cas). En spécifiant des filtres dans la syntaxe et en les séparant avec ces opérateurs, vous les "faites fonctionner" comme un seul. Par exemple, cela ressemble à ceci :
sudo tcpdump -i ppp0 ip dst 95.47.144.254 ou ip src 95.47.144.254
A partir de la syntaxe de la commande, vous pouvez voir ce que nous voulons afficher à l'écran "Terminal" tous les paquets qui ont été envoyés à l'adresse 95.47.144.254 et les paquets reçus à la même adresse. Vous pouvez également modifier certaines des variables de cette expression. Par exemple, au lieu d'IP, spécifiez HOST ou remplacez directement les adresses elles-mêmes.
Filtre de port et portrange
Filtre Port parfait lorsque vous avez besoin d'obtenir des informations sur les paquets avec un port spécifique. Ainsi, si vous n'avez besoin que de voir les réponses ou les requêtes DNS, vous devez spécifier le port 53 :
sudo tcpdump -vv -i ppp0 port 53
Si vous souhaitez afficher les packages http, vous devez saisir le port 80 :
sudo tcpdump -vv -i ppp0 port 80
Entre autres choses, il est possible de tracer la plage de ports à la fois. Pour cela, un filtre est appliqué portrange:
plage de port sudo tcpdump 50-80
Comme vous pouvez le voir, en conjonction avec un filtre portrange il n'est pas nécessaire de spécifier des options supplémentaires. Vous avez juste besoin de définir la plage.
Filtrage par protocole
Vous pouvez également afficher uniquement le trafic correspondant à un protocole. Pour ce faire, vous devez utiliser le nom de ce protocole lui-même comme filtre. Regardons un exemple UDP:
sudo tcpdump -vvv -i ppp0 udp
Comme vous pouvez le voir sur l'image, après avoir exécuté la commande dans "Terminal" seuls les paquets avec protocole étaient affichés UDP... En conséquence, vous pouvez filtrer par d'autres, par exemple, arp:
sudo tcpdump -vvv -i ppp0 arp
ou tcp:
sudo tcpdump -vvv -i ppp0 tcp
Filet filtrant
Opérateur rapporter aide à filtrer les paquets en fonction de leur désignation de réseau. Il est aussi simple à utiliser que les autres - vous devez spécifier l'attribut dans la syntaxe rapporter puis entrez l'adresse réseau. Voici un exemple d'une telle commande :
sudo tcpdump -i ppp0 net 192.168.1.1
Filtrer par taille de paquet
Nous n'avons pas couvert deux filtres plus intéressants : moins et plus grand... D'après le tableau des filtres, nous savons qu'ils servent à sortir davantage de paquets de données ( moins) ou moins ( plus grand) de la taille spécifiée après la saisie de l'attribut.
Supposons que nous voulions uniquement surveiller les paquets qui ne dépassent pas la barre des 50 bits, la commande ressemblera à ceci :
sudo tcpdump -i ppp0 moins 50
Maintenant mappons à "Terminal" paquets de plus de 50 bits :
sudo tcpdump -i ppp0 supérieur à 50
Comme vous pouvez le voir, ils sont appliqués de la même manière, la seule différence réside dans le nom du filtre.
Conclusion
À la fin de l'article, nous pouvons conclure que la commande tcpdump est un excellent outil avec lequel vous pouvez suivre n'importe quel paquet de données transmis sur Internet. Mais pour cela, il ne suffit pas d'entrer la commande elle-même dans "Terminal"... Vous ne pouvez obtenir le résultat souhaité que si vous utilisez toutes sortes d'options et de filtres, ainsi que leurs combinaisons.