Ajouter un utilisateur sur un serveur ftp filezilla

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 723 fois - Téléchargée 16 fois

Contenu du snippet

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 / Exemple :


<?php
if (create_ftpuser('username', 'password', 'C:\\path', $droit='239')) echo 'OK';

function create_ftpuser($username, $password, $path, $permissions='239') {
	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, bytes2string(array(8,0,0,0,0,12,1,0,0,0,0)));
					}
					$readString='';
					break;

				case 2:
					switch(ord($readString[0])) {
						case 33:
							fputs($socket, bytes2string(array(32,0,0,0,0)));
							break;
							
						case 9:
							fputs($socket, bytes2string(array(24,0,0,0,0)));
							$ConnectionState=3;
							break;
					}
					$readString='';
					break;
					
				case 3:
					switch(ord($readString[0])) {
						case 25:
							if (strlen($readString) == ((ord(substr($readString,2,1)) * 256) + ord(substr($readString,1,1)) + 5)) {
								$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 = bytes2string(array(0,0,0,ord(substr($readString,4,1))+1)).substr($readString,5);
								$datass.= bytes2string(array(0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,1,0,strlen($chemin))).$chemin;
								$datass.= bytes2string(array(0,0,1,$droit,0,0,10,0,0,0,0,10,0,0,0,0,0,0,strlen($pseudo)));
								$datass.= $pseudo.bytes2string(array(0, strlen($password))).$password;
								fputs($socket,create_request($datass,'24'));
								$ConnectionState=4;
								echo strlen($readString);
								$readString='';
							}
							break;
					}
					break;
					
				case 4:
					switch(ord($readString[0])) {
						case 25:
							fclose($socket);
							return true;
							break;
					}
					$readString='';
					break;
			}
		}
	}
	fclose($socket);
	return false;
}

function bytes2string($data) {
	$retour = '';
	if (is_array($data)) {
		foreach ($data as $char) {
			$retour .= chr($char);
		}
	}
	return $retour;
}

function create_request($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;
}
?>

A voir également

Ajouter un commentaire

Commentaires

cs_yoman64
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008

Une erreur 500 peut signifier beaucoup de choses, entre autre que PHP a crashé.

Il faudrait savoir de quel façon php est appelé (via FCGI, en module, en cgi). Ensuite il faudrait regarder les logs appropriés.
cs_bloudman
Messages postés
1
Date d'inscription
dimanche 13 septembre 2009
Statut
Membre
Dernière intervention
26 juin 2013

merci pour la source
Cela m'interesse beaucoup c'est exactemment ce que je cherche à faire
Néanmoins ça ne fonctionne pas chez moi, j'ai une erreur serveur 500
J'ai pourtant filezilla qui fonctionne sur le port par defaut pour l'administration et php 5.4.3
je ne sais absolument pas comment faire et cette source semble être mon unique espoir ^^'
merci si jamais quelqu'un pourrais m'aider
pacifikateur
Messages postés
4
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
21 juin 2011

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
cs_taow13
Messages postés
1
Date d'inscription
mercredi 9 juillet 2003
Statut
Membre
Dernière intervention
18 février 2010

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
baddoc007
Messages postés
3
Date d'inscription
dimanche 10 juin 2007
Statut
Membre
Dernière intervention
20 avril 2009

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.

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.