NE316 TP4 le protocole FTP 3 A EIS App 1. L outil FTP : Le serveur FTP est implanté sur le PC à l adresse 192.168.130.90 Pour s identifier on utilise le login «guest» et le mot de passe «secret». Le protocole FTP fonctionne sur ce principe : Le protocole FTP s'inscrit dans un modèle client-serveur, c'est-à-dire qu'une machine envoie des ordres (le client) et que l'autre attend des requêtes pour effectuer des actions (le serveur). Lors d'une connexion FTP, deux canaux de transmission sont ouverts : Un canal pour les commandes (canal de contrôle) Un canal pour les données, uniquement ouvert lors d un transfert de données. Le protocole FTP 2. Le protocole ftp : 1) Option «debug» et «verbose» : Verbose : Permet d Activer/désactiver le mode bavard. Dans le mode bavard (verbeux), toutes les réponses du serveur FTP sont montrées à l'utilisateur. De plus, quand un transfert de fichier est terminé, des statistiques concernant l'efficacité du transfert sont affichées. Par défaut, le mode bavard est activé. Debug [valeur-débogage ] permet d Activer/désactiver le mode de débogage. Si la valeur optionnelle valeur-débogage est spécifiée, elle sera utilisée pour définir le niveau de débogage. Quand le débogage est activé, ftp affichera toutes les commandes envoyées à la machine distante en les préfixant par la chaîne de caractères «-->». Si on active les 2 modes, «debug» permet de voir les messages au serveur FTP, et «verbose» permet de lire les réponses renvoyées par le serveur FTP.
a) Ouvrir la session. ftp> open 192.168.130.90 Connected to 192.168.130.90. 220 ProFTPD 1.3.0 Server (Debian) [::ffff:192.168.130.90] ftp: setsockopt: Bad file descriptor Name (192.168.130.90:root): guest ---> USER guest 331 Password required for guest. Password: ---> PASS XXXX 230 User guest logged in. ---> SYST 215 UNIX Type: L8 Remote system type is UNIX. Using binary mode to transfer files. On ouvre la connexion au serveur grâce à la commande open 192.168.130.90 ou directement quand on tape ftp 192.168.130.90. Le serveur FTP nous répond 220, ensuite le client donne son nom d utilisateur avec la commande FTP USER. Le serveur répond 331, puis le client donne son mot de passe PASS. Le serveur répond 230. SYST est une commande qui permet de connaître le type de système utilisé par le serveur. Il répond avec le code 215. a) Changer de répertoire. ftp> cd TOTO ---> CWD TOTO 250 CWD command successful On change de répertoire grâce à la commande cd <nom du répertoire>. La commande envoyée au serveur FTP est CWD <nom du répertoire>. Il nous répond 250 CWD Command successful. b) Créer un répertoire. ftp> mkdir jeje ---> MKD jeje 257 "/home/guest/toto/ jeje " - Directory successfully created On crée un répertoire grâce à la commande de l interface graphique mkdir <nom du répertoire>. La vraie commande envoyée au serveur FTP est MKD <nom du répertoire>. Il nous répond 257 "/home/guest/ TOTO/ jeje " - Directory successfully created.
c) Supprimer un fichier ou répertoire. ftp> rmdir jeje ---> RMD jeje 250 RMD command successful On supprime un répertoire grâce à la commande rmdir <nom du répertoire>. La commande envoyée au serveur FTP est RMD <nom du répertoire>. Il nous répond 250 RMD command successful. d) Renommer un fichier ou répertoire. ftp> rename jeje ted ---> RNFR jeje 350 File or directory exists, ready for destination name. ---> RNTO ted 250 Rename successful On renomme un répertoire grâce à la commande rename <nom du répertoire>. Il y a deux commandes pour renommer un fichier. La première commande RNFR <nom du répertoire> indique le répertoire à modifier. Le serveur répond 350 File or directory exists, ready for destination name. La seconde commande RNTO <nouveau nom de répertoire> indique le nouveau nom à donner au répertoire. Le serveur répond 250 Rename successful. e) Fermer la session. ftp> close ---> QUIT 221 Goodbye. On ferme la session grâce à la commande close <nom du répertoire>, la commande envoyée au serveur FTP est QUIT. Il nous répond 251 Goodbye.
f) Faire un ls. ftp> ls ---> PORT 192,168,130,30,128,245 ---> LIST 150 Opening ASCII mode data connection for file list drwxr-xr-x 3 guest guest 4096 Jun 1907:32 TOTO drwxr-xr-x 2 guest guest 4096 Jun 1907:19 dte drwxr-xr-x 2 guest guest 4096 Jun 1907:15 fabius -rw-r--r-- 1 guest guest 41 Jun 1907:31 fichieratransferer drwxr-xr-x 11 guest guest 4096 Jun 1907:35 gauthier drwxr-xr-x 2 root root 4096 Jun 1907:06 répertoires On affiche le contenu du serveur grâce à la commande ls, la commande envoyée au serveur FTP est divisée en deux commandes. Première commande : PORT 192,168,130, 30,128,245. Le client donne le port et l adresse IP au serveur pour qu il ouvre le canal DATA. Il répond. La seconde commande LIST demande la liste des fichiers et des répertoires au serveur FTP. Il nous répond 150 avec la liste des fichiers et des informations comme la date, l heure, le nom du créateur et les droits sur le fichier. g) Rapatrier un fichier. ftp> recv fich1.txt local: fich1.txt remote: fich1.txt ---> TYPE I 200 Type set to I ---> PORT 192,168,130, 30,129,2 ---> RETR fich1.txt 150 Opening BINARY mode data connection for fich1.txt (2222 bytes) 2222 bytes received in 0.00 secs (1575.8 kb/s) On rapatrie un fichier grâce à la commande recv, la commande envoyée au serveur FTP est divisée en trois commandes. La première commande TYPE I envoyée par le client donne le format dans lequel le serveur doit envoyer les fichiers Binaires (TYPE A format ASCII). Le serveur répond 200 Type set to I. Deuxième commande : PORT 192,168,130, 30, 29,2. Le client donne le port et l adresse IP au serveur pour qu il ouvre le canal de données. Le serveur répond. La seconde commande RETR <fichier à retirer> demande au serveur d envoyer le fichier. Le serveur répond 150 avec des informations sur le fichier comme le mode de transfert ou la taille. Le serveur répond quand le transfert est terminé
h) Déposer (put) un fichier. ftp> put fich1.txt local: fich1.txt remote: fich1.txt ---> PORT 192,168,130,30,129,6 ---> STOR fich1.txt 150 Opening BINARY mode data connection for fich1.txt 2222 bytes sent in 0.00 secs (8749.7 kb/s) On dépose un fichier grâce à la commande put, la commande envoyée au serveur FTP est divisée en deux commandes. Première commande : PORT 192,168,130,30, 29,2. Le client donne le port et l adresse IP au serveur pour qu il ouvre le canal DATA. Le serveur répond. La seconde commande STOR <fichier à retirer> demande au serveur d envoyer le fichier. Le serveur répond 150 avec des informations sur le fichier comme le mode de transfert ou la taille. Le serveur répond quand le transfert est terminé i) Faire un rapatriement multiple (mget). ftp> mget (remote-files) fich1.txt fich2.txt ---> TYPE A ---> PORT 192,168,130,30,1,9 ---> NLST fich1.txt ---> PORT 192,168,130, 30,129,10 ---> NLST fich2.txt mget fich1.txt? yes ---> TYPE I 200 Type set to I ---> PORT 192,168,130,30,129,12 ---> RETR fich1.txt 150 Opening BINARY mode data connection for fich1.txt (2222 bytes) 2222 bytes received in 0.00 secs (6954.9 kb/s) mget fich2.txt? yes ---> PORT 192,168,130, 30,129,13 ---> RETR fich2.txt 150 Opening BINARY mode data connection for fich2.txt (1530 bytes) 1530 bytes received in 0.00 secs (2078.1 kb/s) On fait un rapatriement de fichier multiple grâce à la commande MGET, on donne comme paramètre le nom des fichiers et le client nous demande de valider chaque fichier. Pour chaque fichier, le client envoi le numéro de port sur lequel il va récupérer le fichier, puis il demande le téléchargement du fichier
2) Différence entre les types de message A et I : Ce type de message apparaît lors d échanges de données sur le canal DATA. Il permet de dire comment le fichier va être transmis. En ASCII ou en Binaire si il y a plusieurs fichiers. Comme pour le TFTP le binaire est fait pour les images. Type A : Passage du fichier en mode ASCII. Type I: Passage du fichier en mode Binaire. 3) Transfert de fichiers et liste de répertoire : Les transferts de fichiers et liste de répertoire se font par le second canal de données. Avant le transfert, le client envoi avec le msg PORT, le port de destination pour les données. La commande PORT correspond au mode actif. Exemple : PORT 192,168,130,30,129,9 Adresse IP de la machine du client : 192.168.130.30 Le numéro du Port est donné : 129,9. Pour le calculer il faut faire le calcul suivant : 129 x 256 + 9 = 33033 = numéro du port du canal DATA. Donc le serveur connaît la machine avec l adresse IP et connaît le port sur lequel il doit se connecter pour envoyer les données. 4) Mode passif : Le serveur FTP détermine lui-même le port de connexion à utiliser pour permettre le transfert des données (data connexion) et le communique au client. L'avantage de ce mode, est que le serveur FTP n'initialise aucune connexion. Ce mode fonctionne sans problèmes avec une passerelle NAT. Mode actif: c'est le client FTP qui détermine le port de connexion à utiliser pour permettre le transfert des données. Ainsi, pour que l'échange des données puisse se faire, le serveur FTP initialisera la connexion de son port de données (port 20) vers le port spécifié par le client. De plus, il peut s'avérer problématique pour les utilisateurs essayant d'accéder à des serveurs FTP lorsqu'ils sont derrière une passerelle NAT. Étant donnée la façon dont fonctionne le NAT, le serveur FTP lance la connexion de données en se connectant à l'adresse externe de la passerelle NAT sur le port choisi. Certaines passerelles NAT n'ayant pas de correspondance pour le paquet reçu dans la table d'état, le paquet sera ignoré et ne sera pas délivré au client. Le principal intérêt du mode passif est que plusieurs client ne peuvent pas avoir le canal DATA sur le même port car c est le serveur qui les déterminent pour chacun.
5) Commande newer : La commande newer est équivalente à la commande get mais elle compare les dates entre le fichier local et le fichier sur le serveur, et ne télécharge que si le fichier serveur est plus récent. Le fichier n existe pas sur le client ou est plus vieux : ftp> newer fich1.txt ---> MDTM fich1.txt 213 20080619080618 local: fich1.txt remote: fich1.txt ---> TYPE I 200 Type set to I ---> PORT 192,168,130,21,129,170 ---> RETR fich1.txt 150 Opening BINARY mode data connection for fich1.txt (2222 bytes) 2222 bytes received in 0.00 secs (2052.9 kb/s) ftp> - Maintenant on modifie en local donc la version sera plus récente, le fichier ne sera pas remplacé : ftp> newer fich1.txt Local file "fich1.txt" is newer than remote file "fich1.txt" Comme prévu, le fichier local est plus récent, il n a donc aucune raison d être téléchargé. 6) Commande QUOTE : La commande quote sert à l envoie des commandes de contrôle FTP. Elle sert à fournir directement les commandes du protocole ftp, sans passer par les commandes interne au service ftp disponible sur l ordinateur. Exemple «chemin courant» et changement de répertoire: ftp> quote PWD ---> PWD 257 "/Disque dur/" ftp> quote pwd ---> pwd 257 "/Disque dur/" ftp> quote cwd / ---> cwd / 250 directory changed to / Exemple de mauvaise commande : ftp> quote toto ---> toto 500 Syntax error, command unrecognized. Comme on peut le constater sur PWD et pwd, les messages ne sont pas sensibles à la casse
7) Les différentes catégories de réponses du serveur : Premier chiffre Chiffre Signification 1yz Réponse préliminaire positive 2yz Réponse positive de réalisation 3yz Réponse intermédiaire positive 4yz Réponse négative de réalisation 5yz Réponse négative permanente Description L'action demandée est en cours de réalisation, une seconde réponse doit être obtenue avant d'envoyer une deuxième commande L'action demandée a été réalisée, une nouvelle commande peut être envoyée L'action demandée est temporairement suspendue. Des informations supplémentaires sont attendues de la part du client L'action demandée n'a pas eu lieu car la commande n'a temporairement pas été acceptée. Le client est prié de réessayer ultérieurement L'action demandée n'a pas eu lieu car la commande n'a pas été acceptée. Le client est prié de formuler une requête différente Second chiffre Chiffre Signification x0z Syntaxe Description L'action possède une erreur de syntaxe, ou bien il s'agit d'une commande non comprise par le serveur Il s'agit d'une réponse renvoyant des informations x1z Information (par exemple pour une réponse à une commande STAT) x2z Connexions La réponse concerne le canal de données x3z x4z Authentification et comptes Non utilisé par le protocole FTP La réponse concerne le login (USER/PASS) ou la demande de changement de compte (CPT) x5z Système de fichiers La réponse concerne le système de fichiers distant Exemple : 226 Transfer complete Cela indique que c est une fermeture du canal de données. Service terminé (par exemple, transfert de fichier ou avortement).
3. Simulation 1) Utilisation de NetCat pour l identification, changement de répertoire, création de répertoires, et fermeture de la session : bt ~ # nc -v hd1.freebox.fr 21 //Commande NetCat en mode verbose vers le serveur FTP sur le port 21 freeboxhd1.freebox.fr [212.27.40.254] 21 (ftp) open 220 Welcome to Freebox FTP Server. user anonymous // Envoi de l identifiant par la commande USER 331 User name okay, need password. pass anon@ // Envoi du m.d.p par la commande PASS 230- Bienvenue sur le serveur FTP Freebox. 230 User logged in, proceed. CWD Disque dur // Changement de dossier avec la commande CWD 250 directory changed to /Disque dur/ MKD test // Création du dossier test avec la commande MKD 257 "/Disque dur/test" created. QUIT // Déconnexion de la session avec la commande QUIT 221 Service closing control connection. Ici net NetCat affiche les messages renvoyés par le serveur. Avec NetCat, il est obligatoire d utiliser les commandes de service FTP (comme avec QUOTE dans un client FTP). 2) Commandes TYPE : Par défaut le type utilisé est le A (ascii). Cette commande est nécessaire uniquement lorsque l on change de type pour lancer un transfert sur le canal DATA. Quand un type est choisit, il reste configuré jusqu au moment où on le change. 3) Opération plus complexe avec échanges sur le canal DATA: NetCat pour émulation du canal commande : 230 User logged in, proceed. list 425 Can't open data connection. pasv 227 PASV OK (212,27,40,254,19,78) list 150 File Status OK. 226 Closing data connection. Apres être logué, on demande l affichage de la liste des fichiers, le serveur répond qu il na pas de canal DATA, on indique alors que l on passe en mode passif, le serveur répond sur quel port il faut connecter le canal data, 19x256+78=4942. Avec un autre NetCat, on émule le canal DATA et on se connecte sur le port 4942 du serveur FTP. Ensuite on redemande la liste des fichiers et OH miracle ca marche. NetCat pour émulation du canal data :
bt ~ # nc -v hd1.freebox.fr 4942 freeboxhd1.freebox.fr [212.27.40.254] 4942 (?) open drwx--x--x 7 freebox freebox 86 Jun 23 17:34 Disque dur 4) Pour la suite, nous avons utilisé les traces de 2 autres binômes. Le serveur était émulé par le binôme Michaud 192.168.130.10 et le client était émulé par le binôme Guyon 192.168.130.21. Affichage Côté client pour le canal de commande: bonn-1:~# nc 192.168.130.10 2121 220 USER xavier 331 PASS passmoile 530 USER xav 331 PASS ok 230 LISR 530 unkwon command Type I 220 PORT 192,168,130,21,2,1 220 LIST 150 220 QUIT 221 Affichage Côté client pour le canal DATA: bonn-1:~# nc -l -p 513 TP4 TP3 TP2 TP1 Ici on est en mode actif car c est le client qui a fournit le port du canal DATA et de plus sur le canal DATA on est en attente sur le port définit. Les réponses que le client reçoit correspondent aux différents codes réponses que l on a pu voir. 4. Conclusion : Pour conclure, il a été très intéressant d étudier le protocole FTP car celui-ci est très utilisé sur internet. Le FTP permet d échanger des fichiers avec un serveur de façon sécurisé (login et mot de passe), et surtout il est très fonctionnel pour la gestion des dossiers (affichage, renommage, liste, comparaison, suppression)