Moteur de serveur ftp objet et fonctionnel teste sous filezilla

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

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.