Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOTEUR DE SERVEUR FTP OBJET ET FONCTIONNEL TESTE SOUS FILEZILLA


Information sur la source

Catégorie :Réseau & Internet Niveau : Initié Date de création : 07/04/2005 Date de mise à jour : 12/04/2005 01:12:50 Vu / téléchargé: 8 253 / 921

Note :
9,25 / 10 - par 4 personnes
9,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note


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

  • 'VOICI LA LISTE DES COMMANDES FTP IMPLEMENTEES
  • "USER"
  • "PASS"
  • "PWD"
  • "PORT"
  • "PASV"
  • "TYPE"
  • "LIST"
  • "CWD"
  • "CDUP"
  • "NOOP"
  • "RETR"
  • "STOR"
  • "MKD"
  • "RMD"
  • "DELE"
  • "RNFR"
  • "RNTO"
'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
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

07 avril 2005 15:34:52 :
08 avril 2005 22:38:15 :
Définition du "default.txt" en chemin absolu, afin d'éviter tout problème.
12 avril 2005 01:12:50 :
La faille de sécurité qui permettait d'explorer les dossiers antérieurs au dossier racine grâce à un bête chemin relatif du type "/../" a été colmatée, voir le code dans la procédure IsInHomeDir

Commentaires et avis

signaler à un administrateur
Commentaire de celiphane le 07/04/2005 23:11:09

Pas de remarques ?

@+
Celiphane

signaler à un administrateur
Commentaire de Mopii9 le 08/04/2005 20:59:05

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

signaler à un administrateur
Commentaire de celiphane le 08/04/2005 21:46:31

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 ;)

signaler à un administrateur
Commentaire de Mopii9 le 08/04/2005 22:23:03

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    

signaler à un administrateur
Commentaire de celiphane le 08/04/2005 22:36:08

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

signaler à un administrateur
Commentaire de FearBlue le 09/04/2005 12:01:18

tres interessant  et tres bien codé !!
par contre il y a un probleme de securité au niveau des repertoire default de chaque utilisateur (rootdir)
En effet,on peut remonter dans l'arboressance et donc acces a tt le disque dur.....
Voila sinon c'est excellent :)

signaler à un administrateur
Commentaire de celiphane le 09/04/2005 20:28:29

Salut FearBlue,

merci pour ton commentaire, en revanche, je ne comprends pas le problème que tu as rencontré...

En effet, le serveur EST programmé pour empêcher d'aller dans les niveau inférieur à la racine autorisée.
Par exemple, lorsque je me logge à l'aide du nom d'utilisateur "utilisateur1" et du mot de passe "pass1", le dossier racine est "c:\Documents and Settings\" et il est impossible de revenir plus bas (à C:\ en l'occurance pour cet exemple).

Maintenant, peut être que tu as utilisé une technique particulière, une "bidouille / faille", pour que ce cela se produise. Dans ce cas, je te serais reconnaissant de me dire comment, afin que je puisse corrigé.
Sinon, fourni moi le log de ton client FTP afin de me convaincre que ca se passe comme tu me le dis.

Regarde, cette fonction qui est implémenté empêche bien ce genre de situation facheuse :

Private Function IsInHomeDir(ByRef strPath As String) As Boolean
  IsInHomeDir = (Left$(strPath, Len(HomeDir)) = HomeDir)
End Function

Elle renvoie true si le chemin demandé se trouve dans la racine, et donc cela autorise l'action demandée (changement de dossier par exemple), sinon elle renvoie false et interdit l'action demandée (revenir plus bas que la racine).

Merci de me répondre,
@+
Celiphane

signaler à un administrateur
Commentaire de FearBlue le 10/04/2005 12:17:25

slt celiphane !!
Donc je vais t'expliquer ce que j'ai remarqué
apres a voir lancé le Serveur Ftp
Je me connect a celui ci avec le client FTP dos.
Voici deja mon fichier default.txt

--------------------------------------------------------
pseudo; password; c:\
flo; flo; c:\Documents and Settings\fearblue\
utilisateur2; pass2; c:\windows\
-----------------------------------------------------------

Voici le log

Connecté a 127.0.0.1
220 Celiphane FTP server
Utilisateur (127.0.0.1:(none)) : flo
331 Username OK, need password.
Mot de passe :
230 User logged in.
cd ../..
250 Directory changed
ftp> dir
200 Port command successful.
150 About to open connection.

ET TICI IL Y APPARAIT TOUS LES FICHIERS DE LA RACINE DU DISQUE C:\

comme tu peux le constaler je n'utilise pas de techniques tres compliquer , juste une remonté dans l'arboressance

En esperant que ca puisse t'aider
Bonne chance
et bonne prog

signaler à un administrateur
Commentaire de celiphane le 10/04/2005 20:34:03

Merci pour ton complément d'informations.
En effet, il n'y a rien de compliqué.

En fait, j'ai l'impression que ton client FTP utilise des chemins relatifs pour naviguer, plutôt que des requêtes en absolue.

Par exemple, lorsqu'on est dans "c:\Documents and Settings\fearblue\" comme dans ton exemple,
plutôt que de demander à aller dans "C:\", il demande directement "..\.." ce qui équivaut à remonter de 2 niveaux.

C'est ceci qui doit perdre mon algorithme, et autoriser l'hérésie ;)

Je vais rectifier ça le plus rapidement possible, dès que j'en aurais le temps ! Merci pour ces précieuses précisions !

@+
Celiphane

signaler à un administrateur
Commentaire de celiphane le 10/04/2005 20:34:54

(pour info, les autres clients que j'avais testé ne s'étaient jamais comporté comme ça, j'ignorais donc que le cas pouvais se produire, merci encore !)

;)

@+
Celiphane

signaler à un administrateur
Commentaire de FearBlue le 10/04/2005 20:57:38

c'est avec plaisir :)
parceque c'est vrai que cette faille la , on la retrouve bcp dans les premieres versions des serveurs ftp meme tres connue donc pas de honte a avoir ;)
Jte souhaite bonne chance
@+FearBlue

signaler à un administrateur
Commentaire de celiphane le 12/04/2005 01:16:22

Voilà, FearBlue, je me suis trouvé 5 minutes et la faille a été colmatée, et l'archive remplacé !
Merci.

Pour info, voici le code que j'ai écrit afin de prévenir la confusion :

  Dim p As Long
  Do
    p = InStr(1, strPath, "\..\")
    If p <> 0 Then strPath = Left$(strPath, InStrRev(strPath, "\", p - 1)) & Right$(strPath, Len(strPath) - p - 3)
  Loop Until p = 0

Je l'ai rajouté dans la procédure IsInHomeDir, qui est toujours appelé, dans le listage d'un dossier comme pour tout autre opérations (upload etc...)

Le chemin strPath étant en Byref, il est par la même corrigé et transformé en chemin absolu.

Merci.
@+
Celiphane

signaler à un administrateur
Commentaire de celiphane le 12/04/2005 01:19:27

A savoir également que je n'ai pas non plus interdit l'utilisation des "/../"
Juste que je les recherche, et lorsque je les trouve, je les supprime ainsi que le dossier qui les précédaient : ainsi, on obtient toujours un chemin absolu, reflêtant la demande qui a été faite même si elle était formulée en relatif.

@+
Celiphane

signaler à un administrateur
Commentaire de FearBlue le 12/04/2005 13:17:38

source testé et c bon:)
Probleme bien résolu
Sinon j'en ai trouvé un autre :s
1)Impossible de se déplacer dans des repertoire avec un espace(exmple Mes Documents)
Voila j'arrete de t'embeter ;)
@+
FearBlue

signaler à un administrateur
Commentaire de Mopii9 le 12/04/2005 16:26:17

40ko/s en download avec un adsl 512 sa dépasse toute mes espérance mon tranfert de fichier codé en vb  téléchargé a 5ko/s et 6ko/s dans ses bon jours... nikelllll krome !!!!!!!!!!!!!

signaler à un administrateur
Commentaire de celiphane le 12/04/2005 18:56:56

;-)

signaler à un administrateur
Commentaire de celiphane le 12/04/2005 19:10:12

alors ça mon bon FearBlue, c'est uniquement dû à ton client FTP, le problème de déplacement dans les dossiers avec des espaces !

J'ai rencontré le même problème dans mes tests : en fait, le client FTP de dos demande une petite subtilité pour ce type de dossier, exemple :

tu tapes cd
puis à l'invite de dossier, tu mets ton dossier à espace : "mon dossier"
SANS omettre les guillemets !!! """"""" !!!
Et là, ça passe !

C'est pas un problème du serveur, j'ai vérifié ! Si tu mets pas de guillemets, le client FTP dos n'envoie que la première partie du dossier taper, en occultant la partie qui suit le premier espace. (constaté par débogage)

D'ailleurs, ça marche partout ailleurs... c'est bien ce client... un tantinet ancien ;-)

@+
Celiphane

signaler à un administrateur
Commentaire de FearBlue le 12/04/2005 19:34:24

oki lool
bon je ne connaissais pas cette substilité
il faut reconnaitre que ce client se fait un peu vieux....
sinon j'ai plus a rajouter....et par conséquent j'arrete de t'embeter ;)
bonne prog
@+FearBlue

signaler à un administrateur
Commentaire de celiphane le 15/04/2005 10:07:34

Tu ne m'as pas embêté, tu as souligné une faille importante.
Sans toi, elle n'aurait surement jamais été décelée.

Merci
@+
Celiphane

signaler à un administrateur
Commentaire de Tioneb le 18/06/2006 18:13:54

Super source qui fonctionne à merveille. C'est exactement ce que je cherchais; merci à toi

signaler à un administrateur
Commentaire de Tioneb le 20/06/2006 20:10:57

J'ai une question: est-il possible de mettre un login/mdp donnant accès à tous les lecteurs du PC? Donc en fait accès au poste de travail

Merci d'avance pour ta réponse

signaler à un administrateur
Commentaire de JLN le 24/02/2007 12:10:38

Salut à tous,

     Je vais essayer ce serveur FTP puique tous ceux qui l'on fait avant moi en disent du bien, dommage que la dernière question soit resté sans réponse...

@+ JLN

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.