Pb socket, avec la command LIST en FTP

cs_Pierrot91 Messages postés 2 Date d'inscription mardi 16 septembre 2003 Statut Membre Dernière intervention 28 septembre 2003 - 17 sept. 2003 à 23:16
ZedMaTrix Messages postés 178 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 14 août 2008 - 23 oct. 2006 à 23:41
Voila j'ai un probleme. Je fais un client FTP.
Il se connect au FTP tout va bien, le probleme est que quand j'envoie la command LIST pour recuperer la liste de fichier present sur le serveur, il m'envoie le message :
-150 Opening ASCII mode data connection fo /bin/ls (x)bytes
puis le message :
-425 Can't build data connection.
le tout quand je suis en mode passif.

Apres on m'a dit qu'il se servait du port decrit lorsqu'on appelle la command PASV, je l'ai utilisé pour cree un nouveau socket qui se connect sur ce port la, et il me dit 226 transfert complete, mais je ne peux rien recuperer.

Enfin j'ai essayer en mode normal en definissant mon port, et en creant un serveur en attente de connection, mais ca me refait la meme chose je ne peux rien recuperer.

Voila help me plz :)

3 réponses

roswell117 Messages postés 61 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 18 novembre 2005
19 sept. 2003 à 00:57
Pour récupérer les données en mode passif, il faut suivre ce schéma :
_ envoi de la commande "PASV" au serveur.
_ le serveur répond en donnant une réponse du style "x,x,x,x,a,b".
_ il faut traduire, les x représentent l'adresse ip, le port est obtenu grâce au calcul a*256 + b.
_ on crée ensuite un socket de type serveur, en écoute, sur le port obtenu.
_ et on finit par envoyer la commande "LIST".

Le ftp comprent deux canaux de communications : un canal de contrôle, pour les commandes sur le port 21 (le + souvent), et un canal de données, pour les transferts sur un port qui change tout le temps.
En mode passif, le client se connecte sur un port défini par le serveur, et en mode normal, mode actif, c le serveur qui se connecte sur un port défini par le client.
Tu as juste inversé le sens des communications.

L'implémentation du mode passif est assez simple à mettre en oeuvre, je l'ai réussie, mais le mode actif est plus compliqué. Je galères toujours sans trop de réussite.
0
cs_Pierrot91 Messages postés 2 Date d'inscription mardi 16 septembre 2003 Statut Membre Dernière intervention 28 septembre 2003
28 sept. 2003 à 19:09
Ok j'ai finalement reussi avec le mode passif, je vais tenter le mode actif un peu plus tard je te dirais si ca marche :)
0
ZedMaTrix Messages postés 178 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 14 août 2008
23 oct. 2006 à 23:41
@ roswell117 : Désolé de te contre dire, mais tu as fais une petite faute dans ton explication.
Tu as dis donc d'envoyer la commande PASV, lire l'adresse IP et le port, ca OK.
Parcontre aprés tu dis de créer une socket en écoutant le port trouvé.
Enffet, il faut créer une socket qui va se connecter à l'adresse IP et le port retourné par la command PASV.

Le cas ou il faut écouté le port c'est avec la commande PORT. C'est nous qui invitons le serveur à se connecter sur notre IP, sur le port que l'on indique.




ZedMaTriX
0
Rejoignez-nous