begin process at 2012 05 27 16:42:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > AJOUTER UN UTILISATEUR SUR UN SERVEUR FTP FILEZILLA

AJOUTER UN UTILISATEUR SUR UN SERVEUR FTP FILEZILLA


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & Internet Classé sous :FTP, Filezilla, utilisateur Niveau :Débutant Date de création :10/10/2007 Date de mise à jour :02/02/2008 09:45:06 Vu :10 391

Auteur : yoman64

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note


 Description

Bonjour a tous!
Il y a longtemps que je n'ai pas posté de code ici, mais je me suis dit que celui-ci pourrait être utile à certaines personnes..

Alors voila cest un code sans prétention qui sert à ajouter un utilisateur sur son serveur filezilla perso. Il suffit d'appeler la fonction en spécifiant le nom d'utilisateur, son repertoire , ses droits sur le repertoire et son mot de passe.

Le principe est simple , on se connecte au serveur FTP via le port d'administration (14147 par défaut) et on crée l'utilisateur.

Bien que le code soit simple, ça m'a pris un moment pour réussir à le faire puisque le protocol de communication de l'interface de gestion de filezilla n'est pas documenté.

Après avoir survoler le code source du serveur, armé de mon fidèle sniffer de paquets et de patience, j'ai décortiqué le protocol afin de pondre cette source qui je l'espere, vous seras utile.


Qu'est-ce que FileZilla Server?

FileZilla est le nom d'un client FTP open source très connu. C'est égallement le nom d'un serveur FTP leger et robuste pour windows.


Tester avec FileZilla Server 0.9.23

Source

  • <?php
  • if (create_ftpuser('roger1', '123456', 'C:\\', $droit='239')) echo 'OK';
  • function create_ftpuser($pseudo, $password, $chemin, $droit='239')
  • {
  • set_time_limit(5);
  • if ($socket = fsockopen('127.0.0.1', '14147', $errno, $errstr, 10))
  • {
  • $ConnectionState=1;
  • while ($readString .= fread($socket,8192))
  • {
  • switch ($ConnectionState)
  • {
  • case 1:
  • if (substr($readString,0,3)=='FZS')
  • {
  • $ConnectionState = 2;
  • fputs($socket, chr(8).chr(0).chr(0).chr(0).chr(0).chr(12).chr(1).chr(0).chr(0).chr(0).chr(0));
  • }
  • $readString='';
  • break;
  • case 2:
  • switch(ord(substr($readString,0,1)))
  • {
  • case 33:
  • fputs($socket, chr(32).chr(0).chr(0).chr(0).chr(0));
  • break;
  • case 9:
  • fputs($socket, chr(24).chr(0).chr(0).chr(0).chr(0));
  • $ConnectionState=3;
  • break;
  • }
  • $readString='';
  • break;
  • case 3:
  • switch(ord(substr($readString,0,1)))
  • {
  • case 25:
  • if ((strlen($readString)) != (( ord(substr($readString,2,1)) * 256) + ord(substr($readString,1,1)) + 5))
  • {
  • }
  • else
  • {
  • $password=md5($password);
  • $readString = substr($readString,4);
  • $datass='';
  • echo '<b>Nombre de comptes sur le serveur FTP: '.ord(substr($readString,4,1)).'</b><br>';
  • $datass = chr(0).chr(0).chr(0).chr(ord(substr($readString,4,1))+1).substr($readString,5);
  • $datass.= shoot('0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 1 0 '.strlen($chemin)).$chemin;
  • $datass.= shoot('0 0 1 '.$droit.' 0 0 10 0 0 0 0 10 0 0 0 0 0 0 '.strlen($pseudo));
  • $datass.= $pseudo.shoot('0 '.strlen($password)).$password;
  • fputs($socket,create_requete($datass,'24'));
  • $ConnectionState=4;
  • echo strlen($readString);
  • $readString='';
  • }
  • break;
  • }
  • break;
  • case 4:
  • switch(ord(substr($readString,0,1)))
  • {
  • case 25:
  • fclose($socket);
  • return true;
  • break;
  • }
  • $readString='';
  • break;
  • }
  • }
  • }
  • fclose($socket);
  • return false;
  • }
  • function shoot($data){
  • $buffer=explode(' ',$data);
  • foreach($buffer as $lettre){
  • $retour.=chr($lettre);
  • }
  • return $retour;
  • }
  • function create_requete($data,$commande){
  • $req = chr($commande);
  • if (strlen($data)>255)
  • {
  • $var1 = (strlen($data)/256);
  • $var1 = substr($var1,0,strpos($var1,'.') );
  • $var2 = (strlen($data)-($var1*256));
  • $req .=chr($var2).chr($var1);
  • $req .=chr(0).chr(0);
  • }
  • else
  • {
  • $var1 = (strlen($data)-($var1*256));
  • $req .=chr($var1).chr(0);
  • $req .=chr(0).chr(0);
  • }
  • $req .= $data;
  • return $req;
  • }
  • ?>
<?php

if (create_ftpuser('roger1', '123456', 'C:\\', $droit='239')) echo 'OK';

function create_ftpuser($pseudo, $password, $chemin, $droit='239')
{	
   set_time_limit(5);
   
   if ($socket = fsockopen('127.0.0.1', '14147', $errno, $errstr, 10)) 
   {
  	$ConnectionState=1;
  	while ($readString .= fread($socket,8192))
    {
			switch ($ConnectionState)
			{
			case 1:	
				if (substr($readString,0,3)=='FZS')
        {
					$ConnectionState = 2; 
					fputs($socket, chr(8).chr(0).chr(0).chr(0).chr(0).chr(12).chr(1).chr(0).chr(0).chr(0).chr(0));
				}
				$readString='';
			break;
			
			case 2:
        switch(ord(substr($readString,0,1)))
        {
        case 33:
        	fputs($socket, chr(32).chr(0).chr(0).chr(0).chr(0));  
        	break;
        case 9:
        	fputs($socket, chr(24).chr(0).chr(0).chr(0).chr(0));
        	$ConnectionState=3;
        	break;
        }
			  $readString='';
      break;
			
        case 3:
        	switch(ord(substr($readString,0,1)))
        	{
  				case 25:
            if ((strlen($readString)) != (( ord(substr($readString,2,1)) * 256)  + ord(substr($readString,1,1)) + 5)) 
            {
            }
            else
            {	
            $password=md5($password);
            $readString = substr($readString,4);
            $datass='';
            
            echo '<b>Nombre de comptes sur le serveur FTP: '.ord(substr($readString,4,1)).'</b><br>';
            
            $datass = chr(0).chr(0).chr(0).chr(ord(substr($readString,4,1))+1).substr($readString,5);
            $datass.= shoot('0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 1 0 '.strlen($chemin)).$chemin;
            $datass.= shoot('0 0 1 '.$droit.' 0 0 10 0 0 0 0 10 0 0 0 0 0 0 '.strlen($pseudo));
            $datass.= $pseudo.shoot('0 '.strlen($password)).$password;
            
            fputs($socket,create_requete($datass,'24'));  
            $ConnectionState=4;
            echo strlen($readString);
            $readString='';
          }
          break;
        }
			break;

			case 4:
				switch(ord(substr($readString,0,1)))
				{
				case 25:
				  fclose($socket);
					return true;
				break;
				}
				$readString='';
			break;
			}
		}
  } 
fclose($socket);
return false;
}


function shoot($data){
	$buffer=explode(' ',$data);
	foreach($buffer as $lettre){
		$retour.=chr($lettre);
	}
 return $retour;
}

function create_requete($data,$commande){
	$req = chr($commande);
	if (strlen($data)>255)
	{
		$var1 = (strlen($data)/256);
		$var1 = substr($var1,0,strpos($var1,'.') );
		$var2 = (strlen($data)-($var1*256));
		$req .=chr($var2).chr($var1);
		$req .=chr(0).chr(0);
	}
  else
  {
		$var1 = (strlen($data)-($var1*256));
		$req .=chr($var1).chr(0);
		$req .=chr(0).chr(0);
	}

	$req .= $data;
 return $req;
}



?>

 Conclusion

PS: Je sais que la fonctione "shoot" bouffe de la performance , mais par soucis de clarter et pour pouvoir modifier plus facilement les commandes je l'ai fait comme ça. Changer ça par ce que vous voulez, mais bon après tout la performance ici n'était pas une prioritée absolue...


Le code est un peu brouillon et il n'est pas optimisé, alors les pros du php , je vous pris d'éviter vos commentaires trop dur, je suis déja au courant de ça ;)


 Historique

10 octobre 2007 11:01:58 :
Désolé , petite erreur dans le code.
06 décembre 2007 15:55:00 :
J'ai juste nettoyer légerement le code.
06 décembre 2007 16:12:55 :
Il y avait un vilain bug qui arrivait de façon intermitente due a la reception incomplète, j'ai donc créé un tampon. En plus il devrait maintenant être compatible avec php4
02 février 2008 09:45:06 :
Correction de fautes

 Sources du même auteur

Source avec Zip CLASSE : GESTION D'UTILISATEURS
Source avec Zip Source avec une capture GÉOLOCALISATION DE VOS VISITEURS (REVISÉ)
Source avec Zip RÉCUPERER LES INFOS D'UN SERVEUR DE JEUX (BEAUCOUP DE JEUX S...
Source avec Zip PORTAIL DE PROGRAMMATION SANS MYSQL
ENREGISTRER LE IP DE CHAQUE VISITEUR

 Sources de la même categorie

INSPECTEUR DE PAGES (VÉRIFIEZ SI DES SITES AFFICHENT UN TEXT... par pablo836
Source avec Zip Source avec une capture GÉOLOCALISATION par pgl10
Source avec Zip TAPI : METTRE EN RELATION DEUX POSTES TELEPHONIQUES par ravery
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
Source avec Zip VALIDATEUR_3WC par lezj

 Sources en rapport avec celle ci

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
Source avec Zip Source avec une capture LOGIN SHA1 + CRÉATION UTILISATEUR par aventurier19
GESTION FTP (CLASSE) par shevabam
Source avec Zip Source avec une capture PHP WEB MANAGER par SimpleGeek
Source avec Zip CLASSE UTILISATEUR POUR GESTION SIMPLE DE LOGIN ET DROITS par Archima

Commentaires et avis

Commentaire de mirmoleboss le 11/10/2007 17:10:51

merci beaucoup bonne idee
tres pratique

Commentaire de zaxtik le 11/10/2007 19:07:34

désolé mais voilà j'utilise assez régulièrement "filezilla" !!!
et... lol... euh j'arrive pas a comprendre à quoi sert cette source ???

donc une 'tite explication en simple histoire de mieux comprendre, jsuis un noob mais il faut bien apprendre mdr...

merci @pluche les mecs !!!

Commentaire de mirmoleboss le 11/10/2007 19:18:29

je crois que je dois preciser, cest cote serveur pas cote client
c'est filezilla serveur pas celui que tu utlises pour te connecter sur ton ftp
enfin peut etre je me trompe?

Commentaire de zaxtik le 11/10/2007 19:46:17

nan pas du tout mirmoleboss !!!

j'utilise effectivement "filezilla" ftp. malheuresement le server faut que j'apprenne à m'en servir...
mais bon faudrait peut etre que je sache vraiment à quoi il sert, si c'est pour créer un serveur disponible de n'importe kel pc conecter au web ou simplement quand intra-net.

enfin bon si ta la foi de m'expliquez sinan je trouveré un bon ptit tuto qui me le dira !!!
en tout cas merci de répondre !!!

Commentaire de yoman64 le 11/10/2007 22:27:57

Voila alors cette source s'adresse a ceux qui on le SERVEUR filezilla ici le client n'a rien a voir..

Elle gere a ajouté un utilisateur a son serveur FTP personnel depuis une page web , dans mon cas sa servait a mes clients pour quil puissent eux meme se faire des comptes ftp sans attendre après moi!

Filezilla Server est un excellent serveur web qui te permet de partager des fichiers sur l'internet!

En esperant avoir répondus a qulques questions.

Commentaire de yoman64 le 11/10/2007 22:30:15

Petite correction de mon précédent commentaire : Filezilla est bel et bien un serveur FTP et non web. désolé pour la faute d'inattention

Commentaire de zaxtik le 12/10/2007 06:47:24

ok ok merci pour ton explication !!!
en effet elle est bien efficace ta source, domage quel ne me serve pas mais bravo quand meme...

aller bonne journée ou soirée byby...

Commentaire de bcopin le 19/10/2007 11:38:52

Bonjour,

Je rencontre l'erreur suivante :

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in e:\....\filezilla.php on line 12

Cette erreur s'affiche sans même faire appel a la fonction.

J'espere que vous pourrez me renseigner.

Cordialement

Commentaire de yoman64 le 19/10/2007 12:19:42

Salut, je ne vois pas ce qui pourrais causer cette erreur puisqu'a la ligne 12 c'est un commentaire ....
Peut tu me dire ce que toi tu as a la ligne 12 dans ton fichier?

Commentaire de mirmoleboss le 19/10/2007 17:39:34

il semble que ceci soit du a une incompatibilité entre code et version nan?

Commentaire de bcopin le 19/10/2007 17:47:09

Bonsoir ,

en fait l'erreur été :
&$errno, &$errstr,

Il s'agissait des & qui posé problème.

Maintenant j'ai un message m'indiquant que la fonction  "stream_get_contents" n'est pas connu.

Merci de votre aide.

Cordialement




Commentaire de yoman64 le 19/10/2007 18:37:24

Le code fonctionne avec PHP version 5 , si tu as encore Php4 cela ne fonctionnera pas!

Commentaire de kinder10 le 21/10/2007 15:01:23

J'ai fait un test en php4 et en php5, en php4 ça ne fonctionne pas et en php5 ça fonctionne. j'aimerai savoir comment rendre le script compatible avec PHP4 ?

Nicolas

Commentaire de mirmoleboss le 21/10/2007 15:16:45

je sais quil existe des generateurs de php4 a php5 mais dans lautre sens je suis pas sur
sinon il est possible de regarder toutes les commandes liées au php5 et regarder leur equivalent en php4 mais des fois il yen a pas..

Commentaire de yoman64 le 21/10/2007 17:02:47

Probablement en utilisant fgets  ainsi que fsockopen  au lieu des commandes de gestion de stream ça fonctionnerais... par contre j'ai pas trop le temps d'adapter :(

Commentaire de griggione le 07/11/2007 08:59:49

Bonjour tous

Merci [b]yoman64[/b]....:)

Commentaire de Zephyr11 le 03/12/2007 12:24:47

Salut. Belle initiative, et surtout merci!

Commentaire de matth59 le 25/02/2008 12:46:25

Bonjour,
Je voudrais savoir si il est possible de modifer ce code pour supprimer un compte?
Merci d'avance.

PS: Je debute donc pas evidant de comprendre le code.

Commentaire de matth59 le 13/03/2008 15:44:22

Bonjour,
Est ce que qq'un saurrait modifié ce code pour supprimer un compte??

Commentaire de baddoc007 le 20/04/2009 10:35:23

Salut,

Merci pour ce script.
J'utilise pour ma part l'authentification sur le server FTP.
Et je ne peux donc pas utiliser ton script.
Saurais tu comment faire pour l'ajouter?

Merci d'avance.

Commentaire de taow13 le 18/02/2010 11:40:28

Bonjour,
Je suis très interessé par cette source, mais mal heureusement je n'arrives pas à l'utiliser.
Je ne suis pas développeur et je ne connais pas du tout php.

J'ai copier ce code dans une extention PHP sur mon serveur. (j'utilise Xampp pour faire fonctionner Apache, MySql et FileZilla sur le serveur)
J'ai modifié le code (la partie du haut) avec les informations correspondant à mon serveur.

Mais lorsque je lance la page PHP depuis un navigateur, j'ai une page blanche, sans aucune boite qui me demande quoi que ce soit.

Pourriez vous m'expliquer comment fonctionne cette source et comment l'installer.
Merci beaucoup

Commentaire de pacifikateur le 27/02/2010 14:17:45

Merci pour cette source,
je ne l'est pas encore tester mais sa fait un moment que je recherche comment créé des utilisateur automatiquement.
@TOAW13:
Cette source est une fonction PHP elle génère pas le formulaire qui permet de l'utiliser, tu doit le créé toit même (en html c'est pas bien compliqué).
Une foi créé tu appel cette fonction et tu luis passe en paramètre les donnée récupère par ton formulaire.

ps: désoler pour l'orthographe

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

:::::: URGENT !!! ENVOI D'IMAGE PAR FTP !!!! ERREUR :::::: [ par kkz_mil3k ] j'essaie d'nevoyer un fichier image gif ou jpg sur un ftp via ce formulaire php :------------------------------------------- //**connecte au ftp sc Vérifier si un utilisateur et son pass appartienne à la BD [ par Nanabel ] Je voudrais savoir comment on peut vérifier qu'un login et son pass sont dans la base de données d'un serveur.Le truc, c'est que je voudrais mettre le listage de dossier ftp [ par evange ] Bien le bonjour,j'aimerais avoir une petite explication, voila, sur mon site, je propose aux membres d'uploader des fichiers sur mon serveur ftp perso connection FTP par PHP [ par JulienC ] Bonjour à toutes et à tous,Mon but est de pouvoir uploader sur mon site des fichiers ayant une extension particulière (on les nommera .ext). Ces fichi trouver mon erreur ! [ par tonyo ] Voila mon code qui doit me permettre de comparer des nombres entrés par l'utilisateur à la page précédente et ceux contenus dans un fichier .txt. l'or deonection table log?? [ par pcpourtous ] voial j'ai une table log, une identification avec une variable session "login"je veux gérer une table log : donc quand l'utilisateur se connecte j'ins ftp et fichier [ par tombal ] Lorsque je transfert mes fichier php sur le ftp de free, n'importe qui a acces a ces fichier via l'html correspondantce qui n'est pas le cas avec mult Upload dossier [ par Mip ] Bonjour,J'ai vu sur ce site beaucoup de source permettant l'upload de fichier sur un ftp... mais pour aller encore plus loin, j'aimerais savoir commen intranet - nom de l'utilisateur [ par ijl ] ijl Comment connaitre le nom de l'utilisateur sur un réseau interne - serveur w2k server et tous les post Mise à jour page HTML (php) avec BD MySQL [ par STef77 ] Bonsoir,J'ai une page html (php) contenant des formulaires afin d'alimenter une BD MySQL avec des entrees utilisateur.Sur cette meme page, j'ai des li


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales