![]()
![]()
![]()
![]()
![]()
Next: Bibliothèque NET:FTP Up: Protocole FTP Previous: Protocole FTP   Contents   Index
Protocole FTP Le protocole FTP (File Transfert Protocol) permet d'échanger des fichiers entre un serveur et un client. C'est un protocole relativement ancien mais toujours très utilisé car efficace et simple.
Dans un premier temps, nous proposons ce mois-ci d'examiner les principales commandes FTP en utilisant l'outil telnet. Puis nous programmerons un client FTP en Scheme. Pour cela, nous ferons appel à la bibliothèque NET d'OpenScheme.
Pour effectuer les exemples de cet article, il est nécessaire de disposer d'un serveur FTP. Votre système Linux dispose sûrement du serveur
wu-ftpd, mais vous pouvez utiliser tout serveur FTP de l'Internet.Le protocole FTP dépasse de beaucoup le simple transfert de fichier entre un serveur et un client. Il permet un accès interactif, de spécifier le format des données transférées et l'authentification lors de la connexion.
Le protocole FTP se distingue de la plupart des autres protocoles d'échange d'informations par le fait qu'au moins deux connexions sont utilisées, l'une pour la supervision du transfert et l'autre pour les données échangées. Plusieurs connexions peuvent être créées pour une seule connexion de supervision.
Nous allons explorer le protocole FTP en utilisant telnet. C'est presque le plus bas niveau d'interface possible qui montre bien les mécanismes mis en jeux. Le port standard pour la connexion FTP est le port 21. Nous pouvons ouvrir une session FTP avec telnet :
$ telnet localhost 21 220 machine.erian.com FTP server ready.Nous supposons que votre machine possède un serveur FTP. Si ce n'est pas le cas, utilisez l'un de vos serveurs favoris. Le code 220 indique que la dernière opération s'est effectuée sans erreur. La connexion FTP est maintenant ouverte. Nous allons nous identifier :
USER gdw 331 Password required for gdw. PASS motdepasse 230 User gdw logged in.Certains serveurs FTP acceptent les connexions anonymes ; pour cela, le nom d'utilisateur est anonymous et le mot de passe est l'adresse email. Certains serveurs FTP anonymes requièrent une adresse email valides, d'autres acceptent des adresses email non valides ; cela se règle dans la configuration du serveur FTP.
Nous sommes maintenant identifiés. Tapons par exemple :
SYST 215 UNIX Type: L8 PWD 257 "/home/gdw" is current directory. CWD tmp 250 CWD command successful. PWD 257 "/home/gdw/tmp" is current directory. CDUP 250 CWD command successful.Ces commandes demandent respectivement la nature du système hôte (SYST), le répertoire courant sur le serveur (PWD), la modification du répertoire courant (CWD) sur tmp, l'affichage du répertoire courant, et le déplacement sur le répertoire parent (CDUP).
Ces commandes sont assez simples car elles n'utilisent qu'un seul canal de communication. Nous allons maintenant mettre en oeuvre une communication sur deux canaux. Pour cela, nous allons tout d'abord passer en mode passif :
PASV 227 Entering Passive Mode (127,0,0,1,167,245)Dans ce mode, le client ne va pas se comporter comme un serveur FTP pour récupérer les informations ; cela est plus simple à mettre en oeuvre et surtout, certaines configurations réseau refusent le mode actif.
Le résultat de la commande indique que, maintenant, nous sommes en mode passif ; les nombres entre parenthèses sont importants car ils indiquent quel serveur et quel port ouvrir pour récupérer le résultat de la prochaine commande. Là, un petit calcul est nécessaire : il faut ouvrir une autre session telnet sur l'adresse IP 127.0.0.1, avec le port 167*256+245.
La commande shell suivante effectue ce calcul. Vous la taperez sur un autre terminal :
$ telnet 127.0.0.1 $(echo "167*256+245" | bc) Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.Cette commande shell est exécutée depuis un autre terminal ; elle remplace le contenu de verb$(...)} par le résultat de la commande à l'intérieur des parenthèses ; ici, on envoie au calculateur bc la demande de calcul entre guillemets.
La nouvelle session telnet est ouvert. Maintenant, si on revient sur la session telnet initiale et que l'on tape :
LIST 150 Opening ASCII mode data connection for /bin/ls. Trying 127.0.0.1... 226 Transfer complete.Nous obtenons alors sur l'autre terminal l'affichage suivant :
total 466 drwxr-xr-x 17 gdw gdw 3072 Aug 9 14:47 . drwxr-xr-x 6 root root 1024 Apr 4 15:37 .. -rw------- 1 gdw gdw 373 Aug 9 14:47 .Xauthority -rwxr-xr-x 1 gdw gdw 172 Nov 23 1999 .Xclients -rw-r--r-- 1 gdw gdw 4114 Mar 1 15:14 .Xdefaults -rw-r--r-- 1 gdw gdw 2455 Oct 24 1998 .Xmodmap -rw-r--r-- 1 gdw gdw 14054 Oct 24 1998 .Xresources drwx------ 2 gdw gdw 1024 Jun 2 12:40 .cedit -rwx------ 1 gdw gdw 757 Oct 24 1998 .clean drwx------ 3 gdw gdw 1024 Aug 4 12:05 .ddd drwxr-xr-x 15 gdw gdw 1024 Aug 4 18:53 .dt -rwxr-xr-x 1 gdw gdw 5111 Nov 4 1999 .dtprofile drwxr-xr-x 2 gdw gdw 1024 Aug 1 00:26 .hotjava -rw------- 1 gdw gdw 20 Oct 24 1998 .ispell_english -rw------- 1 gdw gdw 1959 Jun 22 21:43 .ispell_francais -rw------- 1 gdw gdw 341 Jul 3 09:57 .mailcap -rw-rw-r-- 1 gdw gdw 561 Jun 19 22:25 .mtvrc drwxr-xr-x 8 gdw gdw 1024 Aug 9 14:58 .netscape -rw-rw-r-- 1 gdw gdw 728 Feb 17 18:54 .pgaccessrc -rw-r--r-- 1 gdw gdw 268 Nov 23 1999 .profile -rw-r--r-- 1 gdw gdw 3336 Oct 24 1998 .screenrc -rw-r--r-- 1 gdw gdw 102 Aug 24 1999 .signature drwx------ 2 gdw gdw 1024 Aug 4 18:19 .solregis -rw-r--r-- 1 gdw gdw 3932 Apr 2 21:02 .twmrc drwx------ 3 gdw gdw 1024 Jan 15 2000 .xauth drwxr-xr-x 5 gdw gdw 1024 May 8 18:59 Desktop drwxrwxr-x 3 gdw gdw 1024 Jan 31 2000 MachinaSapiens drwxr-xr-x 5 gdw gdw 1024 Aug 4 14:55 axhome drwxr--r-- 4 gdw gdw 1024 Jul 28 14:37 cv drwxr-xr-x 8 gdw gdw 1024 Feb 24 21:00 erian drwxr-xr-x 2 gdw gdw 2048 Aug 2 11:13 tmp Connection closed by foreign host. $Après l'affichage du résultat, la connexion est automatique terminée. Ce mode de fonctionnement est aussi utilisé pour le transfert de fichiers en entrée et en sortie. Le lecteur pourra expérimenter ces transferts.
Terminons maintenant la session FTP :
QUIT 221-You have transferred 0 bytes in 0 files. 221-Total traffic for this session was 383 bytes in 0 transfers. 221-Thank you for using the FTP service on localhost. 221 Goodbye. Connection closed by foreign host. $D'autres commandes FTP existent comme MKD (création de répertoire), RMD (suppression de répertoire vide), TYPE (positionnement du type de fichier en réception), RETR (récupération de fichier), DELE (suppression de fichiers), RNFR/RNTO (rennommage de fichier), STOR (envoi de fichier), etc.
L'utilisation de telnet pour faire du FTP n'est pas très aisée. Les clients FTP, comme la commande ftp, masquent ces difficultés pour offrir une interface utilisateur plus confortable. C'est justement aussi le rôle de la bibliothèque NET d'OpenScheme, avec les fonctions de la famille net:ftp exposées ci-dessous.
![]()
![]()
![]()
![]()
![]()
Next: Bibliothèque NET:FTP Up: Protocole FTP Previous: Protocole FTP   Contents   Index © 1993 to 2001 Erian Concept