Projet 1 Programmation TCP/IP client-serveur, DNS et capture et analyse de paquets GIF-3001 Réseau de transmission de données 1 Objectifs Comprendre le processus de résolution DNS, et comment utiliser l outil dig pour interroger explicitement les serveurs DNS ; Programmer en C avec les extensions IPv6 au "socket API" ; Effectuer la capture et l analyse de trames Ethernet avec le logiciel Wireshark. 2 Introduction Dans ce projet, vous devez utiliser l outil dig pour interroger le DNS, compiler et exécuter un programme client TCP/IP, et effectuer la capture et l analyse de trames Ethernet. Vous devez également modifier le code source du client TCP/IP pour permettre des connexions IPv4 et IPv6. Votre code doit éviter des références explicites au protocole utilisé. Le code source est disponible sur le site web du cours, section "Travaux". Durant l exécution de votre programme client, vous utiliserez le programme «Wireshark» pour capturer et analyser certains paquets. Vous devez vous assurer de configurer les préférences du logiciel «Wireshark» comme indiqué dans la section 6. IMPORTANT : vous devez utiliser un PC en mode Linux du local situé au 0103 pour ce projet. Le réseau de ce laboratoire est configuré pour supporter IPv6, protocole nécessaire pour le bon déroulement de ce projet. 2.1 Format du rapport Identifiez votre rapport. Vous devez remettre votre rapport en format PDF. Votre code source doit être bien formatté et lisible dans votre rapport. Les captures d écran (Wireshark) doivent être lisibles. Les sections Ethernet, IP, TCP ou UDP ou ICMP doivent être en expansion. 3 Résolution de nom avec la commande «dig» Les noms de serveurs suivants sont utilisés pour ce laboratoire : serveur1.gif3001.beon.ca
serveur2.gif3001.beon.ca Vous devez répondre aux questions suivantes dans votre rapport. Référez-vous aux notes de cours pour connaître les commandes nécessaire pour obtenir l information demandée. Vous devez copier et coller la commande utilisée ainsi que le résultat obtenu dans votre rapport de projet. 1. Quel sont les adresses IP assignées sur l interface Ethernet de votre poste? (copier et coller la commande utilisée et le résultat) 2. Quelles sont les adresses IP du serveur1.gif3001.beon.ca? 3. Quelles sont les adresses IP du serveur2.gif3001.beon.ca? 4. La commande dig a interrogé un serveur DNS pour obtenir ces réponses. Quelle est l adresse IP de ce serveur DNS? 5. Ce serveur DNS est-il autoritaire pour le domaine beon.ca? Justifiez votre réponse avec les résultats de la commande dig (indice : vérifiez les drapeaux (flags) dans la réponse obtenue du serveur). 6. Quels sont les serveurs DNS autoritaires pour le domaine beon.ca? Joignez la commande et le résultat de la commande dig. 7. Utilisez la commande dig pour obtenir une réponse d autorité pour les adresses de serveur1.gif3001.beon.ca. Joignez (copier/coller) la commande utilisée et la réponse obtenue. 4 Compilation et test du client TCP IPv4 Votre programme client utilisera les nom de serveurs suivants pour effectuer des tests de connexions. Le serveur utilise le port TCP 3000. serveur1.gif3001.beon.ca serveur2.gif3001.beon.ca Téléchargez et compilez le programme du client TCP. Le code source du client est disponible sur le site web du cours : http://wcours.gel.ulaval.ca/2016/h/gif3001/default/ 6travaux/index.chtml Lancez la capture de paquets avec le logiciel «Wireshark». Vous devez capturer la réponse à la requête DNS qui sera reçue lorsque votre client TCP sera lancé à l étape suivante. Il n est pas nécessaire d effectuer une analyse de la capture, une copie d écran de la capture suffit. 1. Lancez le programme en utilisant serveur1.gif3001.beon.ca. (b) Quels types d enregistrements ("records") DNS ont été demandés? Quels sont les 2. Lancez le programme en utilisant serveur2.gif3001.beon.ca. Page 2
5 Programmation avec l API RFC3493 Modifiez le programme client TCP pour supporter IPv4 et IPv6. IMPORTANT : Idenfifiez et ajoutez des commentaires dans votre code source. Démarrez une capture de paquets avec le logiciel «Wireshark». Vous devez capturer la réponse à la requête DNS et les paquets TCP qui seront échangés lorsque votre client TCP sera lancé à l étape suivante. 1. Lancez le programme en utilisant serveur1.gif3001.beon.ca (c) Dans "Wireshark", identifiez le premier paquet de l établissement de la connexion TCP du client vers le serveur (Ce paquet contient un segment TCP avec le drapeau «SYN». Voir p. 254 dans le livre du cours). Est-ce que cette connexion TCP a réussi? Sinon, expliquez pourquoi tout en utilisant les informations de capture de paquets. 2. Lancez le programme en utilisant serveur2.gif3001.beon.ca (c) Dans «Wireshark», identifiez le premier paquet de l établissement de la connexion TCP du client vers le serveur (Ce paquet contient un segment TCP avec le drapeau «SYN». Voir p. 266 dans le livre du cours). Est-ce que cette connexion TCP a réussi? Sinon, expliquez pourquoi tout en utilisant les informations de capture de paquets. (d) Analysez le premier paquet de l établissement de la connexion TCP du client. Joignez une capture de la fenêtre «Wireshark» et répondez aux questions suivantes. i. Au niveau de la trame Ethernet (couche liaison) : A. Quelle est l adresse MAC de source? B. Quelle est l adresse MAC de destination? C. Quel est le type de protocole transporté dans le paquet Ethernet? D. Quelle est la taille des adresses MAC? E. Quelle est la taille du champ d identification du protocole? Page 3
F. Quelle est la taille de l entête Ethernet (c.-à-d. l adresse MAC de la source, l adresse MAC de la destination et le champ protocole)? G. Quel est la taille des données utiles de la trame Ethernet (c.-à-d. le nombre d octets transporté dans la trame Ethernet, excluant l entête)? ii. Au niveau du datagramme IP (couche réseau) : A. Quelle est l adresse IP source? B. Quelle est l adresse IP destination? C. Quel est le type de protocole transporté dans le paquet IP? D. Y a-t-il de l information pour la détection d erreurs dans l entête? Si oui, quel est le nom et la longueur de ce champ? E. Quel est la longueur de l entête (octets)? F. Quel est la taille des données utiles IP (c.-à-d. le datagramme IP moins l entête IP)? iii. Dans segment TCP (couche transport) : A. Quel est le numéro du port de la source? B. Quel est le numéro du port de la destination? C. Y a-t-il un champ drapeaux («flags»)? Si oui, quel drapeaux sont présents (actifs)? D. Y a-t-il de l information pour la détection d erreurs dans l entête? Si oui, quel est le nom et la longueur de ce champ? E. Quel est la longueur de l entête (octets)? F. Quel est la taille des données utiles TCP? 6 Configuration et utilisation de Wireshark 6.1 Désactivez la résolution de nom pour les différentes couches Menu "Edit" -> "Preferences". Choisissez "Name Resolution". Assurez-vous que les options de résolution de nom sont toutes désactivées. 6.2 Désactivez l affichage des numéros de séquence TCP relatifs Menu "Edit" -> "Preferences". Dans la section "Protocols", choisissez "TCP". Assurezvous que l option "Relative sequence numbers and window scaling" n est pas sélectionnée. Page 4
Figure 1 Configuration de la résolution de nom dans Wireshark Figure 2 Configuration de l affichage des numéros de séquence TCP Page 5