Travaux pratiques de réseau (GIS3)

Xavier Redon

1   Introduction

Le but de ces travaux pratiques est de vous faire découvrir les réseaux de données. Y sont abordées les notions d'encodage/décodage de données, de partage de médium et les protocoles des principaux services d'Internet.

2   Encodage

2.1   Code fourni

Pour cette partie vous pouvez vous appuyer sur le code fourni dans l'archive http://www.plil.net/~rex/Enseignement/Reseau/Tutorat.Reseau.GIS3/physicalEncodingStudents.tgz. Une bibliothèque très basique de gestion de carte son est incluse. Il ne vous reste plus qu'à compléter les sources encode.c et decode.c. La génération des exécutables se fait par une simple exécution de la commande make dans le répertoire principal du projet.

2.2   Généralités sur les cartes son

Une carte son de PC permet de générer des sons et de faire l'acquisition de sons. La génération de son se fait en envoyant un tableau d'échantillons à la carte. Les valeurs des échantillons correspondent à des positions de la membrane du haut-parleur connecté à la carte. Dans le cadre de ce TP, les échantillons sont des octets et la position de repos de la membrane correspond à la valeur 127. Si un échantillon est plus grand que le précédent, la membrane est déplacée vers l'avant et provoque une surpression. Si un échantillon est plus petit que le précédent, la membrane déplacée vers l'arrière provoque une dépression. Envoyer une série d'échantillons identiques revient donc à n'émettre aucun son. Une autre caractéristique de ce système est que faire vibrer la membrane autour d'une position ou d'une autre génère le même son. Un microphone opère de façon similaire, une surpression va conduire à un échantillon de valeur supérieure à l'échantillon précédent, une dépression va conduire à un échantillon de valeur inférieure à l'échantillon précédent. Dans le cadre du TP les cartes sons sont directement reliées (sortie casque sur entrée microphone) pour éviter les pertes de signal et les interférences mais le principe reste le même. Enfin, toujours dans le cadre du TP, la fréquence d'échantillonnage est de 48000 octets par seconde.

2.3   Bibliothèque pour les cartes son

Cette bibliothèque comprend quatre fonctions de gestion des cartes son dont les prototypes sont définis dans le fichier d'entêtes libsndcard.h.
snd_pcm_t *openSoundCard(char *device,char mode,unsigned char blocking);
unsigned char play(snd_pcm_t * handle,unsigned char *buffer,int size);
unsigned char record(snd_pcm_t * handle,unsigned char *buffer,int *size);
void closeSoundCard(snd_pcm_t * handle);
La première fonction initialise la carte son. Pour une utilisation de type capture de son, utilisez le mode 'r' et pour une utilisation de type génération de son, utilisez le mode 'w'. Dans ce projet le paramètre blocking n'est pas important, utilisez la valeur 1. La fonction play permet de jouer les size échantillons du tableau d'octets buffer. La fonction record permet d'enregister un maximum de size échantillons acquis par la carte dans le tableau pré-alloué buffer. Enfin la fonction closeSoundCard permet de relacher le contrôle sur la carte son.

2.4   Encodage de données

Vous devez, ici, trouver une méthode pour envoyer un tableau d'octets, c'est à dire une suite de bits, à l'aide d'une carte son. Il vous est suggéré de générer des bruits de durées différentes selon l'information à transmettre. Les différentes informations pourraient être le début de transmission, un bit à zéro, un bit à un et la fin de transmission. Implantez votre solution dans le fichier encode.c. Utilisez l'entrée standard pour lire les octets sous la forme de nombre hexadécimaux sur deux chiffres et séparés par des espaces.

2.5   Calibrage de la carte son

Pour faire les tests définitifs vous devrez régler votre carte son. Pour cela compilez l'utilitaire showlevel en utilisant la commande make tune. Reliez la sortie casque de votre carte son à l'entrée micro. Lancez l'utilitaire showlevel puis votre exécutable d'encodage. Jouez avec les contrôles du mixeur alsamixer jusqu'à ce que l'utilitaire showlevel montre un étalement des échantillons sur une large plage de valeur dans l'intervalle 0 à 255, et ce sans saturation. Une fois les bons réglages obtenus vous pouvez sauver votre configuration avec la commande
/usr/sbin/alsactl -f ~/sound.cfg store
La configuration peut ensuite être installée à nouveau avec la commande
/usr/sbin/alsactl -f ~/sound.cfg restore

2.6   Décodage de données

Bien entendu vous devez aussi trouver une méthode pour décoder les sons émis par votre programme d'encodage et afficher le tableau d'octets reçu. Le fichier source correspondant est decode.c. D'un point de vue technique, votre exécutable doit écrire les octets reçus sur sa sortie standard en hexadécimal avec des espaces comme séparateurs. Si vous avez procédé comme suggéré pour l'encodage, le décodage se fait en calculant la durée des bruits. La durée se calcule en comptant le nombre d'échantillons de bruits précédant un silence suffisament long. Il ne vous reste plus qu'à reconstituer le tableau d'octets en fonction des durées détectées.

2.7   Tests

Dans un premier temps vous pouvez vous contenter de tester vos exécutables sur une seule machine en connectant la sortie casque avec l'entrée microphone. Dans un second temps, lorsque votre programme semble suffisament solide, faites un test entre deux PC en connectant les deux cartes son entre elles. Cherchez à optimiser la vitesse de transfert obtenue.

3   Manipulations avec Ethernet

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 /usr/local/src/LSF).

3.1   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).

3.2   Envoi en diffusion totale

Forgez et envoyez une trame Ethernet de type 1111 à destination de l'adresse de diffusion totale ff:ff:ff:ff:ff:ff. Utilisez des octets caractéristiques dans les données pour vérifier que les machines des autres binômes recoivent bien la trame.

3.3   Envoi à une machine précise

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

3.4   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). 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 ?

4   Gestion de collisions

Pour bien comprendre la notion de gestion de collision, il vous est demandé de réaliser une couche de niveau liaison. Vous devrez gérer les collisions pouvant se produire lors de la communication de plusieurs PC sur un bus série. Si vous désirez aller jusqu'au bout de l'exercice, vous pourrez faire en sorte que le port série du PC se comporte comme une interface réseau Ethernet. Ainsi, il sera possible de tester l'efficacité de votre application en utilisant les utilitaires TCP/IP classiques (en particulier ping et ssh).

4.1   Dispositif matériel

Ce projet est basé sur un dispositif matériel qui implante un bus série. Ce dispositif ne comporte, comme composant électronique, que des diodes. Voici le schéma d'un dispositif à 4 ports :
Une réalisation de ce dispositif par Thierry Flamen de la plateforme électronique est visible sur ces deux photos. Vous y trouvez aussi le câble utilisé pour connecter le port série du PC au dispositif (câble avec un connecteur DB9 femelle et un connecteur RJ45 mâle).
 


4.2   Code fourni

Pour cette partie vous pouvez vous appuyer sur le code fourni dans l'archive http://www.plil.net/~rex/Enseignement/Reseau/Tutorat.Reseau.GIS3/linkCollisionsStudents.tgz. Il ne vous reste plus qu'a compléter les fichiers du sous-répertoire Programs. La génération des exécutables se fait par un simple make.

4.2.1   Bibliothèque série

Vous avez à votre disposition une bibliothèque permettant de gérer le port série. Cette bibliothéque ne comporte les fonctions décrites ci-après.
int serialOpen(char *device,int speed,int mode);
void serialClose(int fd);
La première fonction permet d'ouvrir le port série correspondant au périphérique device. Le port est configuré pour une vitesse de speed bauds. Il existe 3 modes d'ouverture :
SERIAL_READ
: possibilité de lire des octets sur le port série,
SERIAL_WRITE
: possibilité d'écrire des octets sur le port série,
SERIAL_BOTH
: possibilité de lire et d'écrire des octets sur le port série.
La seconde fonction ferme le port série. Dans le cadre du TP, le port série est représenté par le fichier spécial /dev/ttyS0 et il est conseillé de commencer par utiliser une vitesse faible (9600 bauds par exemple). Attention, par défaut vous n'avez pas accès au port série de votre PC de TP (affichez les permissions du fichier spécial). Pour obtenir l'accès au port série, utilisez la commande super serial.

4.2.2   Utilitaire de gestion d'interface Ethernet virtuelle

Pour ceux qui souhaitent aller plus loin il est possible de créer une interface Ethernet virtuelle. La création s'effectue avec la commande super addtap <@IP> <mask>, la destruction avec la commande super deltap. Une fois l'interface tap0 créée, il est possible de lancer l'utilitaire ethercat disponible dans le répertoire Utilities. Cet utilitaire utilise la bibliothèque du répertoire Ethernet pour se connecter sur l'interface Ethernet virtuelle. L'utilitaire ethercat affiche sur sa sortie standard les paquets reçus sur l'interface tap0 et envoi sur l'interface tap0 les paquets lus sur l'entrée standard. Les paquets lus sur l'entrée et affichés sur la sortie sont au même format : des octets en hexadécimal sur deux chiffres sans séparateur. Un paquet est terminé par un saut de ligne. L'utilitaire ethercat peut être utilisé, en conjonction avec les programmes d'envoi et de réception sur le port série, pour simuler une connexion Ethernet entre plusieurs machines.

4.3   Communication simple

Nous allons commencer par établir une communication entre deux PC via leurs ports série. Les deux ports série sont connectés par un bus série comme décrit en 4.1.

4.3.1   Procédure d'envoi sur le bus

Dans le fichier source serialWrite.c, écrivez un programme capable de lire des chaînes de caractères sur son entrée standard et de les envoyer sur le port série caractère par caractère. Attention le port série est ouvert en mode non bloquant. Ceci signifie qu'un appel à la primitive write peut échouer avec l'erreur EAGAIN pour cause de port série non immédiatemment prêt à envoyer un caractère. Dans ce cas, il convient d'attendre un cours instant avec la fonction usleep et de retenter l'envoi. N'oubliez pas de prévoir un mécanisme pour séparer les tableaux d'octets (chaînes de caractères). Vous pouvez par exemple transmettre les sauts de lignes. Si vous le souhaitez, vous pouvez aussi envoyer un caractère de début d'envoi.

4.3.2   Procédure de réception sur le bus

Dans le fichier source serialRead.c, écrivez un programme récupérant les octets sur le port série et affichant les tableaux d'octets sur la sortie standard. Attention, l'ouverture du port série en mode non bloquant influe aussi sur la lecture. Vous devez vérifier le retour de la primitive read, l'erreur de type EAGAIN ne doit conduire qu'à une attente courte suivie par une nouvelle tentative de lecture. Les octets ne doivent pas être affichés un par un mais stockés en mémoire et affichés uniquement sur réception de la marque de fin. Le programme doit aussi accepter des paramètres. Chaque paramètre est un préfixe permettant de filtrer les tableaux d'octets. Ne sont affichés que les tableaux commencant par l'un des préfixes. Ce filtrage permet, à terme, de ne laisser passer que les paquets dont l'adresse de destination concerne notre interface Ethernet virtuelle.

4.3.3   Premiers tests

Pour faire le premier test, connectez deux PC via un bus série. Lancez votre exécutable serialWrite sur un PC et votre exécutable serialRead sur l'autre PC. Tapez une chaîne de caractères sur l'entrée standard de serialWrite, elle devrait s'afficher sur la sortie standard de serialRead. Vous pouvez tester la gestion des préfixes en lançant serialRead avec des préfixes en paramètres et en vérifiant que les chaînes affichées sont bien celles commençant par ces préfixes.

Le second test vérifie le bon fonctionnement du bus série. Lancez aussi l'exécutable serialRead sur le premier PC. Vous devriez constater que les caractères envoyés par serialWrite arrivent sur tous les PC connectés au bus série. Essayez aussi avec un troisième PC.

Le troisième test consiste à lancer un serialRead sur un PC et deux serialWrite sur deux autres PC. Le but est d'effectuer un envoi simultané sur le bus série. Si vous avez du mal à synchroniser vos envois vous pouvez écrire une boucle d'affichage en shell et rediriger la sortie de cette boucle sur l'entrée de votre exécutable serialWrite. Que constatez-vous sur la sortie standard de votre exécutable serialRead ?

4.4   Somme de contrôle

Pour éviter d'afficher des tableaux d'octets corrompus, vous allez ajouter une somme de contrôle aux tableaux d'octets transmis sur le bus série.

4.4.1   Calcul de la somme de contrôle

Modifiez votre programme d'émission pour calculer une somme de contrôle et l'insérer en fin de tableau d'octets. Il vous est suggéré d'utiliser l'addition classique sur les octets et de tronquer la somme aux 16 bits de poids faibles. Pour insérer la somme de contrôle, vous pouvez, par exemple, utiliser la fonction sprintf avec un format du type "%04x".

4.4.2   Vérification de la somme de contrôle

Modifiez votre programme de réception pour vérifier la somme de contrôle une fois le paquet reçu. Pour lire la somme de contrôle vous pouvez utiliser la fonction sscanf avec le format "%x". Le paquet ne doit pas être affiché sur la sortie standard si la somme de contrôle n'est pas correcte.

4.4.3   Test de la somme de contrôle

Générez à nouveau des collisions avec des émissions simultanées. Vérifiez qu'aucun tableau d'octets n'est affiché. Arrêtez l'un des processus d'émission vérifiez que les tableaux d'octets sont affichés à nouveau.

4.5   Détection de collisions

Pour éviter les pertes de tableaux d'octets, vous allez mettre en place divers mécanismes déjà utilisé par le protocole Ethernet.

4.5.1   Ecoute de porteuse

Dans votre programme d'émission, ajoutez une fonction permettant d'attendre le silence sur le bus série avant d'envoyer un tableau d'octets. Il va donc falloir ouvrir le port série en lecture et écriture. Il faut aussi trouver un dispositif pour arrêter le programme de lecture sur le port série s'il est lancé sur la même machine. En effet si deux programmes lisent le port série en même temps, le résultat est indéterminé. Il vous est proposé de passer un paramètre optionnel à serialWrite pour lui communiquer le PID du serialRead. Avant l'envoi d'un tableau d'octets le processus serialWrite doit envoyer, en utilisant la primitive kill, un signal SIGSTOP au processus de PID passé en paramètre. Aprés l'envoi, qu'il y ait eu collision ou non, un signal SIGCONT doit être envoyé au même processus.

4.5.2   Détection de collision

Lors de l'envoi d'un tableau d'octets, vérifiez que les octets sont correctement envoyés. Pour cela, il faut faire autant de lectures que d'écritures en comparant les octets pour s'assurer qu'ils sont passés intacts. Si vous souhaitez avoir des performances correctes il ne faut pas essayer de vérifier chaque octet après l'avoir envoyé à cause de la latence entre émission et réception. Cela dit il ne faut non plus faire trop d'écritures avant les premières vérifications car cela conduit à une perte de bande passante en cas de collision. En cas de collision il faut arrêter l'émission immédiatement.

4.5.3   Retransmissions après collision

Lorsqu'une collision est détectée, une retransmission du tableau d'octets doit être retentée après une attente. Utilisez le même algorithme que pour Ethernet, à savoir 16 retransmissions avec des temps d'attentes tirés au hasard entre 0 et (2n)-1 unités où n est le numéro de la tentative. Réduisez l'intervalle à [0,1024] s'il est plus large. A vous de spécifier l'unité d'attente en fonction du temps nécessaire pour envoyer un petit tableau d'octets. N'oubliez pas de relancer l'éventuel processus serialRead avant l'attente. Utilisez la fonction usleep pour réaliser l'attente.

4.5.4   Test de détection de collisions

Générez à nouveau des collisions avec des émissions simultanées. Vérifiez que les tableaux s'affichent à nouveau, bien qu'éventuellement dans le désordre. Attention a ne pas saturer la bande passante avec des envois trop rapides.

4.6   Interface Ethernet virtuelle

Si vous souhaitez aller plus loin vous pouvez utiliser des interfaces Ethernet virtuelles pour tester votre couche liaison avec les utilitaires habituels comme ping et ssh. Regardez le script shell launch.sh qui vous montre comment combiner vos exécutables et l'utilitaire ethercat. Créez une interface Ethernet virtuelle par PC connecté au bus série en lui donnant une adresse IP d'un réseau IP commun (par exemple 192.168.0.0/24). Lancez ensuite le script launch.sh sur chaque PC. Enfin utilisez ping pour vérifier que votre couche liaison est capable de transporter des paquets IP. Vous pouvez aussi lancer des ping simultanés voire des ssh pour des tests exhaustifs.

5   Installation d'un système d'exploitation

Pour les exercices suivants nous allons avoir besoin d'un système Linux sur lequel vous serez administrateur. Nous allons utiliser la distribution professionnelle Debian. Pour ne pas interférer avec le fonctionnement normal de la machine de TP, vous allez créer une machine virtuelle dans laquelle vous installerez le système d'exploitation. Vous utiliserez pour cela kvm, qui émule une machine physique de type PC.

La première opération à réaliser consiste à créer un fichier qui sera utilisé par la machine virtuelle comme disque dur. Dans le répertoire /usr/local1/tmp commencez par créer un répertoire dont le nom est votre login. Puis créez le fichier en utilisant la commande :
qemu-img create /usr/local1/tmp/<login>/disk 10G

5.1   Installation réseau

Une fois que votre disque virtuel est créé, vous allez pouvoir lancer l'installation dans la machine virtuelle. Mais avant cela un pilote de virtualisation doit être chargé, tapez super pilote-kvm. L'installation se lance avec la commande :
kvm -net nic,model=ne2k_pci -net user -hda /usr/local1/tmp/<login>/disk -cdrom /usr/local1/debian/debian-7.0.0-i386-DVD-1.iso
Cette commande lance la machine virtuelle en lui indiquant le fichier servant de disque dur (option -hda /usr/local1/tmp/<login>/disk) et en lui indiquant que votre machine virtuelle aura un lecteur DVD. Ce lecteur DVD pointe sur l'image iso d'un DVD d'installation de Debian. Nous n'utilisons ici que le premier DVD de la distribution (à la question "avez vous d'autres DVD ?" répondez non). Lorsque l'on vous demande si vous souhaitez utiliser un miroir Debian en complément, répondez par l'affirmative et sélectionnez le miroir Debian de l'école. Les éléments de configuration sont précisés dans la section suivante.

5.2   Configuration de Linux

Le reste de la section donne des indications pour l'installation de la Debian, si vous êtes un peu perdu vous pouvez trouver de l'aide à l'URL http://www.debian.org/releases/stable/i386.

Pour configurer le réseau lors de l'installation, laissez faire la configuration par DHCP. Prenez comme nom de machine network suivi du numéro de votre machine réelle. Vous pouvez utiliser deule.net comme domaine Internet.

Choisissez glopglop comme mot de passe de root et ajoutez un compte d'utilisateur normal (spécifiez l'identifiant pifou et le mot de passe pasglop).

Utilisez le disque virtuel entier pour Linux en utilisant le schéma de partitionnement recommandé pour les utilisateurs débutants.

Une fois le système de base installé, il va vous être proposé d'utiliser un miroir de la distribution Debian. Comme miroir spécifiez celui de l'école (ftp://debian.polytech-lille.fr). Faites en sorte d'utiliser le serveur mandataire (proxy in english) de l'école (http://proxy.polytech-lille.fr:3128). Enfin choisissez la configuration "Environnement graphique de bureau", "Serveur SSH" et "Utilitaires usuels" puis laissez le système choisir les paquetages correspondants.

L'installation finale est un peu longue, iconifiez la machine virtuelle et passez à un autre exercice.

À la fin de l'installation, n'oubliez pas de laisser installer le lanceur GRUB sur votre disque virtuel et ajoutez les paquetage suivants :

6   Configuration et utilisation de services Internet

Dans cette partie vous devez configurer des applications pour utiliser les services Internet les plus courants dans votre machine virtuelle installée en TP de systèmes d'exploitation.

6.1   Configuration des applications firefox et thunderbird

Configurez votre navigateur Web pour accéder à Internet (le proxy web de l'école est proxy.polytech-lille.fr et écoute sur le port 3128).

Vous utiliserez thunderbird pour lire les messages de votre boite aux lettres Polytech'Lille et pour en envoyer (le serveur IMAP de l'école est imap.polytech-lille.fr et le serveur SMTP est mail.polytech-lille.fr). Commencez par utiliser les protocoles IMAP et SMTP en mode non sécurisé. Pour utiliser la version sécurisée (SSL) de ces protocoles, vous devez récupérer les certificats de imap.polytech-lille.fr et de mail.polytech-lille.fr sur le site http://ca.polytech-lille.fr et les importer dans icedove.

Il est aussi possible d'utiliser un serveur LDAP sous thunderbird et de s'en servir comme annuaire. Vous allez donc déclarer le serveur LDAP de l'école (annuaire.polytech-lille.fr sur le port 389 en utilisant le DN de ou=people,dc=polytech-lille.fr) et l'utiliser pour rechercher toutes personnes ayant le même prénom que vous.

6.2   Utilisation de X11

Utilisez la procédure sécurisée permettant d'afficher l'application xeyes lancé de votre machine virtuelle sur l'écran X11 de votre machine réelle (sans utiliser l'option -X de ssh et en utilisant l'utilitaire xauth).

Si vous souhaitez réaliser l'affichage des applications de la machine réelle sur l'écran de la machine virtuelle, il faut que le serveur X de la machine virtuelle démarre sans l'option nolisten. Modifiez le fichier de configuration /etc/gdm3/daemon.conf pour qu'il contienne :
[security]
DisallowTCP = false
Il faut aussi supprimer l'option nolisten dans le script /etc/X11/xinit/xserverrc.

6.3   Comparaison des protocoles TELNET et SSH

Dans une fenêtre de votre machine virtuelle lancez un analyseur réseau comme wireshark. Utilisez une autre fenêtre pour vous connecter de votre machine virtuelle vers l'extérieur. Commencez par une connexion telnet vers la machine weppes. Testez ensuite ssh. Que constatez-vous au niveau de la sécurité des différentes commandes vis à vis d'un éventuel pirate ?

6.4   Comparaison des protocoles HTTP et HTTPS

Faites le même type de comparaison entre les protocoles HTTP et HTTPS. Commencez par capturer les paquets quand vous vous identifiez pour accéder au site http://rex.plil.fr/gis3. Que constatez-vous ? Faites de même lorsque vous vous identifiez pour accéder cet autre site d'URL http://twiki.polytech-lille.fr.

6.5   Connexion SSH sans mot de passe

Faites en sorte de pouvoir vous connecter avec ssh sur weppes de votre machine virtuelle (compte pifou) sans avoir à taper de mot de passe. Essayez de vous connecter de la même façon sur d'autres machines de TP, que constatez-vous ? pourquoi ?

7   Manipulation de protocoles de services Internet

7.1   Protocole HTTP

En utilisant une connexion par nc, trouvez quel type de serveur web utilisent les sites www.polytech-lille.fr, www.univ-lille1.fr, www.microsoft.com, www.orange.fr et www.labanquepostale.fr. Essayez pour les 3 derniers sites à partir de la machine weppes, que constatez-vous ? Comment pouvez-vous tout de même effectuer le test à partir de cette machine ?

7.2   Protocole SMTP

Envoyez un message sur la boite aux lettres de votre binôme sans utiliser de client de messagerie autre que nc. Récupérez ce message via les protocoles pop puis imap en utilisant le même nc.

7.3   Protocole FTP

Commencez par étudier le protocole FTP en lançant, sur votre machine virtuelle, un renifleur réseau et en vous connectant sur le serveur de votre machine de TP. Regardez comment FTP implante le listage de répertoires et la récupération des fichiers.

Récupérez la liste des fichiers du répertoire /pub/linux/kernel/v2.6 sur le serveur FTP ftp.polytech-lille.fr sans utiliser de client FTP. Vous aurez besoin de deux instances de l'utilitaire nc pour réaliser cet exploit. Utilisez la même méthode pour déposer un fichier dans votre répertoire racine par FTP.

Utilisez uniquement deux connexions avec nc pour transférer un fichier du serveur FTP ftp.polytech-lille.fr vers votre répertoire racine en utilisant le serveur FTP de votre machine.
This document was translated from LATEX by HEVEA.