Pb socket, avec la command LIST en FTP

Signaler
Messages postés
2
Date d'inscription
mardi 16 septembre 2003
Statut
Membre
Dernière intervention
28 septembre 2003
-
ZedMaTrix
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
14 août 2008
-
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

Messages postés
61
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
18 novembre 2005

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.
Messages postés
2
Date d'inscription
mardi 16 septembre 2003
Statut
Membre
Dernière intervention
28 septembre 2003

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 :)
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
14 août 2008

@ 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