Etude des en-têtes de différents protocoles
Après une étude théorique des en-têtes des différents protocoles, nous allons maintenant voir ce qui les informations qui circulent réellement sur le réseau.
Après avoir lancé une capture sur notre sniffer, nous prenons un paquet au hasard, et nous observons la partie Ethernet II dans l’arborescence ainsi que la correspondance hexadécimale, en dessous :
Tous les paquets d’un réseau ayant comme technologie Ethernet doivent posséder ce protocole au niveau de la couche Accès Réseau : c’est la base de toute communication. Nous observons l’adresse MAC de destination ainsi que l’adresse source. Il y a aussi le champ Type, précisant vers quelle pile envoyer le datagramme (ici IP). Le préambule de synchronisation ainsi que le checksum ne sont pas représentés, en effet, ils n’apparaissent qu’à un niveau physique.
En dessous, nous avons la correspondance de ce paquet en hexadécimal (à droite), ainsi que la correspondance ASCII (à gauche). Chaque groupement de deux caractères hexadécimal ou chaque caractère ASCII représentent un octet. Nous pouvons alors observer que l’en-tête Ethernet a une taille de 14 octets. C’est cet en-tête qui va être utilisée par le matériel pour déterminer les paramètres d’envoi (adresses) sur tous les réseaux. La machine émettrice va utiliser ces adresses pour savoir vers quelle interface envoyer les données.
Maintenant, passons à l’en-tête ARP, utilisée lors de demandes de correspondances @MAC/@IP. Cet en-tête ce présente comme suit :
Nous observons tous les champs déjà étudiés dans le cours théorique. Nous pouvons aussi remarquer que ce paquet la a pour OPERATION (Opcode) 1 : question ARP (ou ARP Request). Sa taille est également celle attendue : 28 octets (224 bits). Notons que ARP est encapsulé directement sur Ethernet : il ne supporte pas IP : c’est la raison pour laquelle il ne peut passer un routeur.
Observons de même l’en-tête du protocole IP :
Nous retrouvons les différentes parties de l’en-tête IP théorique. Les champs les plus importants sont bien sur Source et Destination qui contiennent les adresses IP Sources et Destination. Nous voyons le contenu de tous les champs. Il est utile de remarquer que la vérification du checksum IP a été effectué : « correct ». Si ne l’était pas, le paquet n’aurait pas été transmis.
Dans la partie hexadécimale, nous constatons que la taille de cet en-tête est de 20 octets. Nous sommes donc en présence d’un en-tête minimal, car la taille minimum pour un en-tête IP est de 20 octets, comme précisé dans le cours théorique.
Voyons l’en-tête ICMP :
Nous observons tous les champs étudiés dans le cours théorique. Ici, le paquet est un ICMP type 8 (ICMP Echo Request). Il faut remarquer quelque chose d’important. Comme vous pouvez le voir, dans la traduction ASCII de ce paquet, les 32 derniers octets représentent l’alphabet dans l’ordre : « abcdefghijklmnopqrstuvwabcdefghi ». Il faut en revenir à la commande utilisée. En effet, nous nous sommes servis du ping par défaut de Windows, qui est un ping contenant 32 octets de données (ajouter des données dans un ping peut permettre de tester du matériel défectueux : il peut dans certains cas se trouver qu’une prise, ou autre connecteur retransmette des pings seuls, ou des paquets de faible taille, mais pas des paquets contenant beaucoup de données). Lorsque nous sollicitons la commande ping de Windows, celle-ci met dans le champ données les lettres de l’alphabet.
Ce protocole est sans doute le plus complexe de la pile TCP/IP. Voyons son en-tête :
Nous retrouvons tous les champs de l’en-tête théorique. En analysant ce paquet nous pouvons voir que c’est une demande de connection (le flag SYN est activé : « set ») sur un service telnet distant (le port 23). L’émetteur de ce paquet accepte une WINDOWSIZE de 4288 octets. Le checksum a été vérifié, et le champ SEQUENCE NUMBER contient le numéro ISN (puisque le flag SYN est présent). Le champ ACK NUMBER n’est pas renseigné car le serveur n’a pas encore répondu à cette demande. Cette en-tête a une taille de 44 octets (352 bits ou 11 mots de 32 bits). La taille standard (sans option) est de 20 octets (5 mots de 32 bits). Ici il y a donc 24 octets d’options. La taille qui est exprimée dans la capture (« 24 bytes ») ne correspond pas à des bits (c’est une unité américaine). En fait, 1 bytes = 1 octet.