MYFTP :: FTP EN C SOUS UNIX

Signaler
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
-
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37096-myftp-ftp-en-c-sous-unix

cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
@evo11wrc : Désolé pour ce petit soucis de fichier, je ne sais pas trop ce qu'il a pu se passer.
Cela dit, c'est corrigé ;)
evo11wrc
Messages postés
1
Date d'inscription
samedi 17 juin 2006
Statut
Membre
Dernière intervention
22 mars 2007

votre fichier n'est pas valide
on a besoin de fillezella pour avoir un code valide
attendre votre reponse
merci
cimcim
Messages postés
31
Date d'inscription
mardi 11 janvier 2005
Statut
Membre
Dernière intervention
29 juillet 2010

De rien, c'est normal, et en meme temps, moi ca m'aide !!! ;)
Je complete mon message pour dire qu'il faut également ajouter la relecture des données envoyées dans les fonctions get_file et send_file...
Et après, tout à l'air de rouler !!!
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Je te remercie beaucoup de l'aide et de l'attention que
tu apportes à ce programme :)

Je n'avais pas l'erreur sous Mandrake et CygWin.
Cependant, l'astuce que tu préconnises doit être aussi valable pour (K)ubuntu...:)
cimcim
Messages postés
31
Date d'inscription
mardi 11 janvier 2005
Statut
Membre
Dernière intervention
29 juillet 2010

oki, j'ai trouvé ce qui n'allait pas....
en fait, après avoir fermé la socket, il faut relire ce que le serveur envoie...
donc, après le
"close(current.dat_d);"
il faut ajouter :
"long_chaine = recv(current.com_d,cmd,sizeof(cmd),0);
cmd[long_chaine-2]='\0';
code = atoi(str_sub(cmd,0,2));
printf("%s\n",cmd);"
et à la fin de la transaction, on obtient cette sortie écran :
"226 Transfer complete.
ftp> "
voila... en espérant que ca aide quelqu'un...
CimCim
cimcim
Messages postés
31
Date d'inscription
mardi 11 janvier 2005
Statut
Membre
Dernière intervention
29 juillet 2010

Salut Spawnrider
et merci pour ta source qui m'aide bien... Par contre, j'ai une remarque...
Je suis sous Debian Sarge (moi aussi) et la connexion à un serveur ftp passe sans problème. Après quoi, je peux faire un ls. Mais un seul.... En effet, si je refait un 2eme ls, il n'entre jamais dans le "if(code==227){..." car code vaut 200...
Je pense qu'il doit manquer un cmd_recv quelque part, car une fois la transaction terminée, je recois un code 226 qui n'est pas traité, mais qui fait que j'ai un code de retard par rapport au if...
Voila, si tu as réussi a comprendre ma question, pourrais tu m'aider ?
Merci !!
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Bonjour Romaric,
Non je n'ai absolument pas de code pour une partie serveur.
C'est un client FTP simple.
Ta plateforme ne change rien au résultat escompté du fait que tu recompiles tes sources sur ta plateforme.
Si tu as une connection refusée, c'est soit que tu n'est pas connecté à un serveur ou que le serveur te refuse la connection. Cela dit, je n'exclus pas une alerte du type "Connection refusé" sur une commande de type ls ou transfert de fichier sur le canal de données en mode actif.
Mais normalement vu que tu n'as surement pas mis cette option en parametre du client ftp, cela devrait fonctionner correctement.

J'ai testé avec succés par proxy (Janaserver2), Filezilla, ftpserv, u-serv, 1 ftp de ma machine.
J'ai meme recompilé les sources sur Cygwin avec succés...

Si tu as d'autres questions n'hesites pas...
je tiens à préciser que ce ftp est mis en ligne en vue de l'étude des sources, d'une eventuelle amélioration ou tout autre chose du même type et non prévue pour une utilisation normale de transfert de fichiers.
Je ne suis pas responsable des pertes de fichiers dû à un probléme de transfert...

Yohann
rask
Messages postés
3
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
14 mai 2006

je voudrais ajouter que j'utilise Debian sarge
A +
Romaric
rask
Messages postés
3
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
14 mai 2006

Bonjour je n'arrive pas à l'exécuter sur ma machine. Il me dit que la connexion a été refusée. Je voudrais aussi savoir s'il n'y a pas un code pour la partie serveur et un autre pour la partie client. Merci de m'aider.
A plus

Romaric
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Et bien tu peux télécharger la derniere version ici ou poster sur mon forum sur le site http://www.spawnrider.net.

Bien que la version présente ici soit effectivement la derniere en date :)

Bonne soirée
+++
rask
Messages postés
3
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
14 mai 2006

Bonsoir je veux que tu m'envoies la dernière version de ton code.
Du courage

romaric
rask9@yahoo.fr
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Mise à jour effectuée !
Je n'ai pas utilisé la fonction getpass() [depreciée !]...

;)
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Bon apparement pour getpass, c'est obsoléte et déconseillé donc je ne l'utiliserais pas...
Sinon, je viens de finir le mode actif et le mode passif/proxy et ça fonctionne...
J'upload dès que possible ;)
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Autant pour moi,
aprés une verifion :
man 3 getpass http://www.maconlinux.net/linux-man-pages/fr/getpass.3.html
Je viens de trouver mon bonheur ...

Par contre, pour le mode actif, je dois récuperer mon IP internet, celle fourni par ma passerelle et non celle de ma carte ethenet. Quelqu'un sait-il comment faire ?
J'ai entendu parler de getsockname.....

Merci à vous ;)
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Merci à toi, c'est exactement ce dont j'avais besoin...
getpass("");
...
c'est quoi comme fonction ?
C'est une fonction a toi ou une fonction d'une bibliotheque C ANSI?
Merci en tout cas ;)
kinjiro
Messages postés
7
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
17 avril 2006

Salut j'ai regardé tres vite tes sources apres avoir regardé ton screenshot.
Dans le screenshot j'ai remarqué que l'on voyai le pass que tu insérais.
Je te conseil de ne pas utiliser un scanf pour un mot de pass (si une personne passe derriere ton
dos, li l'ecran il connaitra le mot de pass).

Donc dans fonction.c

change:

char pass[255];
printf("Mot de passe pour %s :",user);
scanf("%s",pass);

par:

char *pass;
pass = (char *)malloc(255);
printf("Mot de passe pour %s :",user);
pass = getpass("");

Comme cela lors de la saisie du mot de pass rien ne s'affiche et aucun risque de te faire voler ton
mot de pass. En ce qui concerne le reste des sources je n'ai pas tout regardé.
Si je remarque d'autre petite chose du genre je t'en ferai part.
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Juste pour dire que :
Le fichier select.c n'a rien à faire dans l'archive...
cs_Spawnrider
Messages postés
255
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Avis aux etudiants de l'IUP de Rouen :
il n'est pas la peine de faire un copier/coller de mon code sans en modifier une grande partie.

Vous pouvez tout de même vous en inspirez...