Client/serveur FTP

Résolu
snakeissat Messages postés 30 Date d'inscription jeudi 20 mai 2010 Statut Membre Dernière intervention 8 juillet 2012 - 21 mai 2010 à 11:01
snakeissat Messages postés 30 Date d'inscription jeudi 20 mai 2010 Statut Membre Dernière intervention 8 juillet 2012 - 25 mai 2010 à 21:17
bonjour,
j'essaye de développer un client FTP en se basant sur la bibliothèque libre org.apache.commons.net,
FTPClient f = new FTPClient();
f.connect("127.0.0.1",30);
f.login("client2", "passwd");
j'ai telechargé un serveur ftp:TYPSoft FTP Server ,je l'ai mis en écoute, la connexion s'établit, tous marche bien sauf lorsque je met
FTPFile[] files = f.listFiles("D:\");
il ne me renvoi rien, il ne fait que le f.listFiles();(il me renvoi les dossiers du bureau) malgré que j'ai configuré mon serveur pour donner à ce user la possibilité de voir toutes les racines.
est ce qu'il faut que je crée mon propre serveur FTP et si oui comment ?
merci vraiment pour l'aide

16 réponses

cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
23 mai 2010 à 07:16
ça ne semble pas une super idée d'un point de vue sécurité d'avoir un accès au système de fichier complet par ftp (mot de passe circulant en clair + serveur ftp possédant souvent des failles de sécurité (type buffer overflow)).
Mais sinon pourquoi pas.
Sinon si tu ne t'en sort pas avec TYPSoft essaie de faire la même chose Filezilla serveur.
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 mai 2010 à 11:20
Salut,

A mon avis, il faut spécifié un chemin existant sur ton serveur FTP : D:\ n'est sûrement pas un répertoire sur ton serveur FTP : un serveur FTP pointe vers un dossier en particulier.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
snakeissat Messages postés 30 Date d'inscription jeudi 20 mai 2010 Statut Membre Dernière intervention 8 juillet 2012
21 mai 2010 à 12:34
salut,
je veux parcourir tous les dossier dans toutes les racines,est ce que tu a une idée comment faire, la développement d'un serveurFTP serait-il une solution?
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
22 mai 2010 à 13:34
Salut,
Essaie f.changeWorkingDirectory("D:\") puis f.listFiles() tu as plus de chance que cela fonctionne.
Sinon fait un ftp en ligne de commande sur ton serveur et tente des cd "D:\" ou autres pour voir ce que ton serveur ftp supporte.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
snakeissat Messages postés 30 Date d'inscription jeudi 20 mai 2010 Statut Membre Dernière intervention 8 juillet 2012
22 mai 2010 à 13:46
salut,
j'ai déja essayé f.changeWorkingDirectory("D:\") mais ça marche pas,lorsque je fait en ligne de commande ftp cd
il me dit non connecté malgré que mon serveur en marche, je sais pas quel type de serveur me faut il pour faire fonctionner une telle application.
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
22 mai 2010 à 15:02
En ligne de commande il faut faire si ton serveur est en localhost :
ftp localhost
[tape ton login puis entrée]
[tape ton password puis entrée]
après une fois logué tu peux tapé help pour les commandes accessibles
D'intéressant pour toi tu as :
"pwd" qui te montre le repertoire courrant
"ls" ou "dir" qui liste la liste des fichiers du repertoire
"cd <rep>" qui permet de changer de répertoire, exemple "cd .." pour aller au repertoire parent.
Je ne sais pas comment ça fonctionne avec un serveur ftp sous windows, sous linux pour aller à la racine on fait "cd /".
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 mai 2010 à 15:39
Salut,

Kysic : est-ce qu'il est possible de changer de disque en ftp ? car apparemment, c'est ce qu'il cherche à faire avec son f.changeWorkingDirectory("D:\").

Il me semble bien que ftp est fait pour ne travailler qu'à partir d'un répertoire bien précis, et n'a pas accès à tout les disques de la machine, si ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
22 mai 2010 à 15:52
Je sais pas avec son serveur ftp et sous windows mais le protocole ftp n'impose pas de limitation particulière.
Avec un serveur ftp sous linux, en général le répertoire de connexion dépends du login, on arrive par exemple dans le /home du user. Mais suivant la configuration du serveur on peut très bien changer de répertoire pour remonter (avec ..) dans un répertoire plus haut. On peut également configurer le serveur pour que le répertoire par défaut soit "/".
Sous linux, un autre disque ou une autre partition sera accessible comme un dossier normal (par exemple dans "/media/disque2/")
Ce n'est généralement pas ce qui est souhaité, on préfère "chrooter" pour que les utilisateurs ne sortent pas de leur répertoire.
Sous windows je suppose que l'on peut aussi configurer le serveur pour pouvoir accéder à tous les dossiers de la partition. Pour changer de disque ou de partition je sais pas trop, mais je suppose que certains serveur doivent l'autoriser par exemple en ajoutant un niveau "/" dans la hiérarchie de dossier.
dans ce cas "cd /c" permettrait d'accéder à C et "cd /d" à D.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 mai 2010 à 15:57
Salut,

Ok, merci de cette précision, c'est bon à savoir, je pensais que les serveur FTP ne permettait que de travailler dans un seul répertoire (en tout cas, je m'étais jamais vraiment posé la question).
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
22 mai 2010 à 16:01
Au pire il peut créer deux users, un dont le repertoire par défaut est la racine de C et l'autre pour lequel c'est la racine de D.
Il se loggue avec l'un ou l'autre suivant ce qu'il veut faire.
Bon c'est assez moche quand même.
 
0
snakeissat Messages postés 30 Date d'inscription jeudi 20 mai 2010 Statut Membre Dernière intervention 8 juillet 2012
22 mai 2010 à 18:56
salut,
merci pour la discussion, en faite ce que je veut faire c'est la visualisation de l'arborescence du système des fichiers de toutes machines connectés sur un réseau, j'ai pensé à activer un serveur FTP qui ecoute sur un port donné dans chaque machine et exécute le travail demandé (listFiles, upload...) par un client FTP (écrit en java)
0
snakeissat Messages postés 30 Date d'inscription jeudi 20 mai 2010 Statut Membre Dernière intervention 8 juillet 2012
23 mai 2010 à 23:01
salut,
merci pour les suggestions, j'ai essayé avec FileZilla server mais le problème reste le même
ftp.changeDirectory("C:") m'affiche un msg d'erreur :"/C:": directory not found.
j'ai essayé tous les solution, j'ai même pensé en RMI mais encore ça n'a pas marché.
en tous cas merci,
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
24 mai 2010 à 09:37
Mais non il ne faut pas abandonner, au pire tu fais une class serializable contenant un attribut String nomDeFichier et un attribut byte[] contenu; et tu l'envoi dans une connexion tcp.

Mais pour en revenir à ftp, ça m'intrigue.
A tu essayé ftp.changeDirectory("C"); ftp.changeDirectory("/C"); ftp.changeDirectory("/c"); ftp.changeDirectory("C:/"); ftp.changeDirectory("C:"); ftp.changeDirectory("../"); ftp.changeDirectory("../../..");...

Sinon essaie un truc de ce genre et voit ce qu'il te sort :

FTPClient f = new FTPClient();
f.connect("127.0.0.1",30);
f.login("client2", "passwd");
do {
  System.out.println(f.printWorkingDirectory());
}
while (f.changeToParentDirectory());
0
snakeissat Messages postés 30 Date d'inscription jeudi 20 mai 2010 Statut Membre Dernière intervention 8 juillet 2012
24 mai 2010 à 16:46
salut,
merci encore une fois, j'ai essayé d'utiliser ce package croyant que ça va me faciliter la tache,mais les socket semblent mille fois plus performant.
bon, j'ai essayé un truc qui semble un peut bete en utilisant les socket,le serveur de la machine demandé envoie le chemin de tous les dossiers dans un fichier .txt, et du coté recepteur le client lit le fichier ligne par ligne, il fait
File ff=new File(ch2);
ff.mkdirs();
ch2 étant un chemin d'un dossier de type C:\Documents and Settings\Administrateur\
etc
cela permet de créer une arborescence semblable à celle de l'émetteur et de la rasembler dans un dossier puis je fait le parcours de ce dossier et je reconstruit une arborescence puis j'efface récursivement les dossiers construit,
ça me semble vraiment bête mais quand même ça donne plus au moins une solution .
merci
0
snakeissat Messages postés 30 Date d'inscription jeudi 20 mai 2010 Statut Membre Dernière intervention 8 juillet 2012
25 mai 2010 à 21:17
salut,
merci bien pour tous les efforts, le problème est résolu, maintenant je peut accéder aux sous répertoires.
si tu as une idée comment pourrais je faire un JFileChooser d'une machine en réseau.
merci.
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
25 mai 2010 à 18:54
J'ai fait des petits tests en arrivant au boulot ce matin :
Avec Filezilla serveur si tu veux accéder à plusieurs partition il faut utiliser les alias.
J'explique, tu crée d'abord un répertoire ftp sur le PC (par exemple
le dossier C:\ftp) qui est vide).
Tu va dans le menu de configuration de l'utilisateur avec l'interface
du serveur (Edit->Users).
Tu va dans les répertoires partagés de ton utilisateur (Shared Folder).
Tu ajoute le répertoire C:\ftp dans les répertoires auquel il a accès
et tu le met en "home dir" (c'est la qu'il aterrira en ce connectant).
Tu ajoute ensuite le répertoire C: et tu lui met comme alias C:\ftp\C.
Tu ajoute ensuite le répertoire D: et tu lui met comme alias C:\ftp\D.
Désormais si tu te connecte avec cet utilisateur si tu fait un ls
après t'être connecté tu verra C et D (tes deux alias) et tu pourra
aller dedans (cd /C ou cd /D).
C'est vrai que c'est pas super intuitif...
-2
Rejoignez-nous