Previous Up Next

2  Manipulation de paquets

2.1  Introduction

Le but de ce TD est de forger et de décrypter des paquets de la suite de protocoles réseau TCP/IP.

2.1.1  Déroulement du TD

Chaque exercice doit être abordé suivant les étapes ci-dessous :

  1. construction théorique (sur papier) du paquet à émettre,
  2. émission réelle du paquet sur le réseau de Polytech’Lille,
  3. capture du ou des paquet(s) en réponse,
  4. décryptage (sur papier) de la réponse.

2.1.2  Détails techniques

Pour vous permettre d’émettre et de recevoir des paquets Ethernet sur le réseau de Polytech’Lille, vous disposez d’un utilitaire ether (le binaire se trouve dans /usr/local/bin et vous pouvez trouver les sources complètes dans les annexes).

2.1.3  Indications pratiques

L’utilitaire ether est utilisable dans deux modes différents : un mode d’affichage où il affiche les paquets Ethernet reçus par l’interface réseau et un mode pour envoyer un paquet Ethernet. Vous laisserez donc une instance du programme tourner en mode affichage et vous en utiliserez une autre pour envoyer vos propres paquets. En mode affichage vous pouvez demander à l’utilitaire de n’afficher que les paquets à destination d’une certaine adresse Ethernet, vous pouvez même demander à ne pas afficher les paquets de diffusion (broadcast). Tapez ether --help pour obtenir la syntaxe des différentes options. Essayez d’utiliser directement le programme ether. Que se passe-t-il ? Par la suite vous utiliserez le programme en passant par la commande super (regardez la page de manuel de super et son fichier de configuration).

2.2  Initiation à l’utilisation du programme ether

Cet exercice a pour objectif de vous familiariser avec l’utilitaire ether. Pour cela nous allons réaliser un petit utilitaire de conversation instantanée.

2.2.1  Envoi manuel

Déterminez l’adresse Ethernet de la machine d’un autre binôme. Forgez et envoyez ensuite une trame Ethernet à destination de cette machine (utilisez le type Ethernet 1111). Assurez vous que la trame a bien été reçue.

2.2.2  Utilitaire de conversation

Utilisez les squelettes de scripts PHP fournis en annexe pour réaliser deux commandes : une pour recevoir et afficher les messages envoyés avec le type 1111 et une pour envoyer un message à une machine donnée. Les messages doivent être donnés en clair (une chaine de caractères) et être affichés en clair.

2.3  Vérification du fonctionnement des commutateurs

Cette fois envoyez une trame Ethernet de type 1111 à destination d’une adresse Ethernet que vous savez inutilisée sur le réseau local (et avec une adresse Ethernet source elle aussi inutilisée sur le réseau local). Procédez comme indiqué sur le schéma :

Que constatez-vous ? Associez-vous avec un autre binôme, envoyez une réponse à leur paquet Ethernet pendant qu’ils font de même avec le vôtre. Envoyez à nouveau votre paquet initial, que constatez-vous ?

2.4  Paquets ARP

Cet exercice est une manipulation du protocole ARP de résolution d’adresses MAC de la suite TCP/IP.

2.4.1  Envoi d’un paquet ARP

Forgez un paquet de demande de résolution d’adresse MAC pour une adresse IP utilisée sur le réseau des étudiants de Polytech’Lille. Faites en sorte que la réponse puisse être aperçue sur l’interface Ethernet de votre machine. Envoyez le paquet, capturez la réponse et décodez la.

2.4.2  Réponse à un paquet ARP

Utilisez la commande ping pour tester la présence d’une machine sur le réseau étudiant. Prenez une adresse IP dont vous êtes sûr qu’elle n’est pas utilisée. Vérifiez qu’une question ARP est envoyée sur le réseau pour trouver l’adresse MAC correspondant à cette adresse IP. Capturez cette demande et forgez le paquet de réponse. Envoyez la réponse sur le réseau. Quel type de paquet est ensuite envoyé à l’adresse MAC que vous avez prétendu correspondre à l’adresse IP ?

2.5  Paquets IP

2.5.1  Indications pratiques

Dans les entêtes d’un paquet IP on trouve une somme de contrôle. Le calcul de la somme de contrôle est décrit dans la RFC 1071. En résumé, le calcul se fait comme suit :

  1. la somme de contrôle ne concerne que les entêtes du paquet IP (pas les données du protocole encapsulé),
  2. pour le calcul, on considère que le champ de la somme de contrôle est initialisé à zéro,
  3. on regroupe les octets deux par deux et en cas de nombre impair d’octets on ajoute un octet nul,
  4. le calcul consiste à faire une addition en complément à 1 des mots de 16 bits ainsi formés,
  5. on met dans le champ de la somme de contrôle non pas le résultat de l’addition mais l’inverse (au sens de la négation booléenne bit à bit).

Ecrivez un petit programme pour calculer une somme de contrôle IP, vous pouvez vous aider du morceau de code C de la RFC 1071.

2.5.2  Somme de contrôle

Forgez un paquet IP encapsulant un paquet vide d’un protocole IP fantaisiste. Commencez par mettre une somme de contrôle non adaptée. Envoyez le paquet, voyez-vous passer une réponse, pourquoi ? Modifiez le paquet en insérant une somme de contrôle correcte, envoyez-le. Repérez un paquet en réception en relation avec le paquet envoyé. Forgez la réponse à ce dernier paquet. Envoyez ce paquet réponse, décodez la suite de l’échange.

2.5.3  Durée de vie

Forgez un paquet IP encapsulant un paquet vide d’un protocole IP fantaisiste. Ce paquet doit être à destination d’une machine sur le réseau serveurs de Polytech’Lille. Positionnez le champ TTL à 1. Envoyez le paquet, faites ce qu’il faut pour qu’un paquet ICMP vous parvienne. Que signifie ce paquet ICMP ?

2.6  Paquets ICMP

2.6.1  Indications pratiques

La somme de contrôle d’un paquet ICMP tient compte des octets de données (i.e. l’entête du paquet ayant donné lieu à l’emission du paquet ICMP).

2.6.2  Paquets de type echo

Reprenez l’exercice sur ARP manipulant la commande ping. Faites en sorte de répondre au paquet ICMP de demande d’écho (forgez le paquet, envoyez le, vérifiez au niveau de la commande ping que votre réponse est bien comprise).

2.7  Paquets ICMPv6

2.7.1  Indications pratiques

Une différence majeure entre IPv4 et IPv6 réside dans la somme de contrôle qui a disparu du niveau IP. Il faut cependant s’assurer que les paquets transmis ne comportent pas d’erreurs, notamment sur les adresses source et destination. La somme de contrôle de ICMPv6 est calculée à partir d’un pseudo-en-tête (visible sur schéma ci-dessous) concaténé avec le paquet ICMP complet. L’algorithme de calcul est le même que pour IPv4.

2.7.2  Paquets de type echo

Utilisez l’utilitaire ping6 (équivalent en IPv6 de l’utilitaire ping) pour tester la présence d’une machine sur le réseau étudiant. Prenez une adresse IPv6 2001:660:4401:6004:xxxx:xxxx:xxxx:xxxx, construite à l’aide de l’EUI-64 correspondant à votre adresse MAC virtuelle. Forgez le paquet de réponse à la demande de résolution d’adresse (rappel : le protocole ARP est intégré dans le protocole ICMP en IPv6). Puis envoyez un paquet de réponse d’écho.

2.8  Paquets UDP

2.8.1  Indications pratiques

La somme de contrôle d’un paquet UDP tient compte d’une pseudo-entête IP (voir schéma ci-dessous), de l’entête UDP (avec le champ somme de contrôle initialisé à zéro) et des données UDP.

Si la somme calculée vaut 0x0000 il faut envoyer 0xffff (la valeur zéro représente un paquet UDP sans somme de contrôle).

2.8.2  Emulation de la commande traceroute

Envoyez des paquets UDP vous permettant de connaitre la liste des routeurs sur le chemin entre votre machine de TP et la machine guillotin.prism.uvsq.fr.

2.9  Paquets TCP

2.9.1  Indications pratiques

La somme de contrôle d’un paquet TCP tient compte d’une pseudo-entête IP (voir schéma ci-dessous), de l’entête TCP (avec le champ somme de contrôle initialisé à zéro) et des données TCP.

Le champ taille du paquet TCP dans la pseudo entête IP doit être calculée à partir de la taille du paquet IP et de la taille des entêtes IP.

2.9.2  Refus de connexion par RESET

Logez-vous sur une autre machine de TP, utilisez la commande nc pour vous connecter sur un port de la machine que vous émulez. Répondez à la requête ARP générée par nc. Étudiez le paquet TCP de demande de connexion, répondez par un paquet TCP RESET.

2.9.3  Émulation de la phase de connexion

Reprenez la question précédente mais cette fois envoyez un paquet de réponse SYN. Vérifiez par la commande netstat que la connexion TCP est bien établie.


Previous Up Next