Moteur de serveur ftp objet et fonctionnel teste sous filezilla

Soyez le premier à donner votre avis sur cette source.

Vue 12 166 fois - Téléchargée 1 159 fois

Description

Préambule
------------------------------------------
Bonjour à tous,
cela faisait longtemps que je n'avais pas ajouté de code sur le site, alors j'ai cherché parmi mes récents développements ce qui pouvait vraiment servir, et j'ai conclu qu'en posant ce serveur FTP, cela ravirait certains, que ce soit en terme de fonctionnalité ou en terme d'apprentissage winsock (pour parfaire les connaissances acquises via le tutorial).

Le SERVEUR FTP
------------------------------------------
Ainsi, cette source est un serveur FTP, il est selon mes rares tests pleinement fonctionnel, il autorise toutes les opérations courantes (sur les dossiers, fichiers, le download, l'upload, le mode passif et le mode actif). Il gère également les utilisateurs, avec bien entendu pseudo, mot de passe propre à chacun, mais aussi le dossier racine paramétrable pour chacun.
Sachez toutefois que vous ne trouverez dans cette source que le strict nécessaire d'un serveur FTP, considérons donc cela comme un MOTEUR de SERVEUR FTP.
A titre d'exemple pour illustrer cette qualification, les utilisateurs sont définis dans un fichier externe, qui possède sa propre structure, à éditer par exemple via notepad, mais il n'y a pas l'interface pour les saisir les modifier etc... Comprenez par là que ce n'est pas le but de cette source de proposer un SERVEUR FTP complet "ready to sell" : c'est le moteur, autour duquel vous pouvez (devez / devrez) construire VOTRE application, quelle qu'elle soit.

Fonctionnement
------------------------------------------
L'archive fournie avec cette source comprend un exemple d'utilisation du moteur minimaliste "ready to run". Téléchargez, exécutez, puis ouvrez votre client FTP favori : vous pourrez ainsi via l'adresse localhost, le pseudo "pseudo" et le mot de passe "password" explorer votre C:\ via FTP.
Voici les données utilisateur par défaut, actuellement présentent dans le fichier de config "default.txt" :
(login ; password ; dossier racine)
pseudo; password; c:\
utilisateur1; pass1; c:\Documents and Settings\
utilisateur2; pass2; c:\windows\

La structure
------------------------------------------
Le moteur est objet, me semble propre et "fully optimized", bien que créé je l'avoue rapidement, en une nuit et quelques heures de peaufinage, FROM SCRATCH.
Voici sa structure :

>> une Form FTPserver : elle est le noyau du moteur, et héberge les contrôles Winsock. J'ai préféré utiliser les contrôles Winsock, et donc je me suis contraint d'utiliser cette Form, simplement parcequ'ils demeurent à ma connaissance les plus stables face aux solutions "Winsock-less" basées sur les API. La Form peut tout à fait rester invisible, tout comme contenir une interface, cela n'a pas d'importance : elle ne fait qu'héberger.
Elle a 3 procédures majeures :
- LoadParameters(Optional FromFile As String = ""), qui charge les utilisateurs depuis un fichier fourni, sinon depuis un fichier nommé "default.txt"
- StartServer(Optional ByVal Port As Long = 21), dont la fonction est évidente
- CloseServer(), qui se passe aussi de commentaire

>> une Class ClassUser, qui n'a pour seule fonction que d'être un objet contenant un utilisateur chargé dans le moteur. Le noyau possède une collection de cette Class.

>> une Class ClassClient, qui représente un client actuellement connecté au serveur FTP. Le noyau possède une collection de cette Class. Nota : c'est la ClassClient qui s'autogère. Le développement est donc bien POO puisque chaque client se gère seul, et non pas le noyau qui va patronner tout l'ensemble. La gestion du code s'en trouve simplifiée, clarifiée, et le tout est stable (pas de bouchons dans les traitements de plusieurs acteurs par une même procédure "master", chaque individu se gère)

Les fichiers des utilisateurs
------------------------------------------
Le moteur doit se voir renseigner les utilisateurs qu'il peut accepter, ainsi que le dossier racine du partage FTP de chacun d'entre eux.
Pour se faire, vous devez appeler la procédure évoquée plus haut, LoadParameters, en lui indiquant en paramètre le fichier à charger. La structure de ce fichier est :

pseudo; password; chemin_racine_absolu\
pseudo; password; chemin_racine_absolu\
pseudo; password; chemin_racine_absolu\
etc... autant que nécessaire par utilisateur.
Un utilisateur donné ne peut figurer qu'une seule fois.

Vous pouvez regarder le fichier default.txt fourni dans l'archive. Sachez également que la procédure appelée SANS argument cherchera à charger le fichier nommé "default.txt".

Source / Exemple :


'VOICI LA LISTE DES COMMANDES FTP IMPLEMENTEES

"USER"
"PASS"
"PWD"
"PORT"
"PASV"
"TYPE"
"LIST"
"CWD"
"CDUP"
"NOOP"
"RETR"
"STOR"
"MKD"
"RMD"
"DELE"
"RNFR"
"RNTO"

Conclusion :


Ceci constitue mon premier serveur FTP, réalisé à l'aide des connaissances acquises PENDANT son élaboration.

Je ne garantie donc pas du tout sa stabilité, bien qu'aucun problème ne soit survenu pendant mes tests sous FileZilla.

Aussi, il ne gère qu'une seule racine par utilisateur, mais elle peut être différente pour chacun.

Je ne l'ai pas testé contre les failles de sécurité (overflow etc). Le moteur est fourni tel quel, sans aucune garantie, comme tout les sources codes du présent site ;)
Il est en revanche assez aisé de modifier les parties qui vous sembleront sensibles, s'il y'en a.

IL N'EST PAS COMMENTE, MAIS SA STRUCTURE EST EPUREE. (ceux qui me connaissent savaient déjà de toute façon, qu'il ne serait pas commenté dès le début de leur lecture ;p).

Faites moi part de vos tests, ainsi que des problèmes que vous rencontrez. Inscrivez le log de votre client FTP là où ça coince, si ça coince...

Voilà, Merci d'avoir lu jusqu'ici,

@+
Celiphane

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007
-
Pas de remarques ?

@+
Celiphane
Mopii9
Messages postés
91
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
23 mai 2005
-
Connexion à localhost sur le port 21. Tentative 1 de 3...
220 Celiphane FTP server
USER pseudo
331 Username OK, need password.
PASS *****
530 User refused.
Délai de 30 secondes avant la prochaine tentative...


Impossible de le faire marcher...
pseudo : pseudo
mdp : password

testé avec FTP Expert 3
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007
-
salut Moppi9,
on va avoir un conflit tous les deux ;)
(je plaisante bien sûr)

Après avoir lu ton commentaire, j'ai immédiatement téléchargé FTP expert 3, je viens de lancé mon serveur, j'ai mis localhost, pseudo, password, et... ca marche (comme sous Filezilla, l'Explorer / Internet Explorer, NetDrive, WebDrive, qui m'ont également servi de base d'essai, maintenant je sais grâce à toi que FTP expert l'accepte aussi, quoi de plus normal, le serveur respecte le protocole à la lettre).

N'étant pas assez gonflé pour te demander si tu sais bien te servir de ton client (ce qui serait VRAIMENT gonglé n'est-ce pas ? Bien que je sois sur que certains n'hésiterai pas à te rembarrer comme ça, lol, les méchants !), je me contenterai de supposer que tu as mal orthographié le password peut être, qui doit être saisi vraiment tel quel, "password", sensitive case include.

Sache également que j'obtiens le même log si je retire le fichier de configuration des utilisateurs, ce qui est bien normal, puisque dans ce cas AUCUN n'utilisateur n'existe et personne ne peut donc se connecter (personne n'en a le droit ! Pas d'users !).

Je te serais gré de retester sachant cela, ne retire pas le default.txt, ou alors renomme le différement, mais dans ce cas, passe en paramètre le nouveau nom avec son chemin à la fonction LoadParameters du Module Mprinc... c'est un minimum ;)

Peut-être n'as tu simplement pas extrait les fichiers texte, voulant éliminer les "fichiers messages" inclus par le site vbfrance, et du coup, tu as aussi omis le fichier default.txt ! (bon surement en fait :o] )

;)

@+
Celiphane
ps: tester convenablement svp, et dites moi ce que vous pensez du code après ;)
Mopii9
Messages postés
91
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
23 mai 2005
-
Celiphane,
Je te présente mes excuses pour avoir douté de ton programme lol, il marche bien c'était juste le défault.txt qui FAISAIT planté il faudrai le virer.... enfin bref ton prog est très bien fait autant sur le plan pratique que au niveau du codage.

Et je sais me servir de mon client FTP c'est pas gentil de me dire sa :(

Conclusion : Si vous n'arrivez pas à vous connecter vous supprimez le défault.txt, puis vous le creez dans un autre répertoire en changeant le chemin dans le code (pour moi sa a marché bien que je ne comprenne pas bien pourquoi . . .)



Bonne prog à tous
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007
-
Rassure toi Mopii9, je sais parfaitement que tu sais te servir de ton client ;)

Je plaisantais simplement.

Quoi qu'il en soit, je te remercie pour tes sympathiques compliments.

Je viens de regarder ce "problème" du "default.txt"; j'avoue ne pas bien comprendre pourquoi il ne le prend pas directement chez toi, puisqu'il le fait chez moi (xp pro), cela dit, avec du recul, je veux bien avouer une faiblesse dans le code qui y pointe (que je vais corriger en uploadant une nouvelle archive sitôt ce commentaire validé), et voici se problème de pointage :
le programme fait appel à "default.txt", censé être dans le dossier de l'executable, lorsque qu'aucun autre fichier de config n'est passé en paramètre à la procédure LoadParameters. Or, il se trouve que j'appelle directement le fichier "default.txt", mais je suppose que de manière plus sûr, j'aurais dû (et je vais le faire comme susdit) faire pointer sur le fichier en utilisant un chemin complet, et ne pas miser sur la relativité des chemins comme c'est le cas actuellement (apparement valide chez moi mais pas partout ! ne rien négliger !). Ainsi, dans le "nouveau" code de pointage que je vais mettre d'ici peu, on ne trouvera plus :

If FromFile "" Then FromFile "default.txt"
--mais--
If FromFile "" Then FromFile App.Path & IIf(Right$(App.Path, 1) = "\", "", "\") & "default.txt"

Ce qui assurera le pointage, chemin absolu oblige.

Merci de ta participation.

@+
Celiphane

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.