Cftpserver, classe c++ d'un serveur ftp complet et rapide. win32 et linux

Soyez le premier à donner votre avis sur cette source.

Vue 17 843 fois - Téléchargée 1 299 fois

Description

Edit: bonjour au lecteur de passage; Avant que vous ne lisiez cet article et n'utilisiez cette librairie, je voudrais vous informer que ce code a été écrit durant ma période de formation au C++ et ne correspond pas à mes critères actuels de qualités. Je vous déconseillerai donc d'utiliser ce code dans quelque projet critique que ce soit. Néanmoins, dans la mesure où ce code pourrait permettre de mieux appréhender le protocole FTP, j'ai pris la décision de ne pas effacer cet article.

CFtpServer est une Class C++ qui permet aux developpers d' inserer dans leurs programmes un server FTP rapide, simple, et fonctionnel. CFtpServer est multithreadé et tourne en parallele de votre code.

Commandes supportées :
USER, PASS, SITE, SITE EXEC, HELP, REIN, SYST, STRU, MODE, TYPE, PORT, PASV, LIST, NLST, CWD, XCWD, FEAT, MDTM, PWD, XPWD, CDUP, XCUP, STAT, ABOR, REST, RETR, STOR, APPE, STOU, SIZE, DELE, RNFR, RNTO, MKD, XMKD, RMD, XRMD

Compile sans pb avec VC++6, Dev-C++, gcc WIN32/LINUX

Votez SVP !

http://sourceforge.net/projects/cftpserver/

theBrowser

Source / Exemple :


/*

  • CFtpServer :: a FTP Server Class Library
  • Copyright (C) 2005, Poumailloux Julien aka theBrowser
*
  • Mail :: thebrowser@gmail.com
Copyright (c) 2005 POUMAILLOUX Julien Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. g++ ./CFtpServer/CFtpServer.cpp ./Example/main.cpp -o FtpServer -lnsl -lpthread Under SunOS and mayber some other OS, you may need to link to '-lsocket' too.
  • /
#include "../CFtpServer/CFtpServer.h" int main( int argc, char * argv[] ) { #ifdef WIN32 WSADATA WSAData; if( WSAStartup( MAKEWORD(2, 0), &WSAData) != 0 ) { printf("-WSAStartup failure: WSAGetLastError=%d\r\n", WSAGetLastError() ); return 0; } #endif CFtpServer FtpServer; FtpServer.SetPort(21); // default FTP port is 21 FtpServer.SetDataPortRange( 100,100 ); // data TCP-Port range = [100-199] #ifdef CFTPSERVER_ANTIBRUTEFORCING // See CFtpServer.h, not defined by default FtpServer.SetCheckPassDelay( 1500 ); // kind of bruteforcing protection #endif if( FtpServer.AllowAnonymous( true, "C:/anonymous" ) == false ) { // allow anonymous user printf("-Unable to create anonymous user; Make sure its StartPath exists!(C:/anonymous)\r\n"); } #ifdef WIN32 CFtpServer::UserNode *FtpUser = FtpServer.AddUser( "test", "pass", "C:\\"); #else CFtpServer::UserNode *FtpUser = FtpServer.AddUser( "test", "pass", "/"); #endif if( FtpUser ) { printf("-FtpUser successfuly created ! :)\r\n"); FtpServer.SetUserMaxClient( FtpUser, CFtpServer::Unlimited ); FtpServer.SetUserPriv( FtpUser, CFtpServer::READFILE | CFtpServer::WRITEFILE | CFtpServer::LIST | CFtpServer::DELETEFILE | CFtpServer::CREATEDIR | CFtpServer::DELETEDIR ); #ifdef CFTPSERVER_USE_EXTRACMD // See CFtpServer.h, not defined by default FtpServer.SetUserExtraCmd( FtpUser, CFtpServer::ExtraCmd_EXEC ); // Security Warning ! Only here for example. // the last command allow the user to call the 'system()' C function! #endif if( FtpServer.StartListening() ) { printf("-Server is listening ! :)\r\n"); if( FtpServer.StartAccepting() ) { printf("-Server successfuly started ! :)\r\n"); while( 1 ) #ifdef WIN32 Sleep( 1000 ); #else usleep( 1000 ); #endif FtpServer.StopListening(); } else printf("-Unable to accept incoming connections.\r\n"); } else printf("-Unable to listen.\r\n"); } else printf("-Unable to create FtpUser.\r\n"); printf("-Exiting.\r\n"); system("pause"); return 0; }

Conclusion :


voila un bon exemple.
Sinon, le code est bien optimisé niveau rapidité.
Niveau sécurité, ca m'étonnerai vraiment que y ai des problemes.

Voila, j'attend vos commentaires !

theBrowser

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
7
Date d'inscription
samedi 23 mai 2009
Statut
Membre
Dernière intervention
20 juillet 2010

Salut !

Ton code à l'air d'être sympa mais tu pourrai m'expliquer comment sa marche concrètement parce que moi je suis un gros zéros pour ce qui est du réseau ,ce serait hyper gentil.

Et une question ,je suis sous code blocks ,sa marche aussi ?

Merci d'avance !!

Cordialement,

ufukendu59
Messages postés
17
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
29 mai 2009

voici les code errur avec console c++builder
[C++ Avertissement] CFtpServer.h(59): W8017 La redéfinition de 'MAX_PATH' n'est pas identique
[C++ Erreur] CFtpServer.h(63): E2209 Impossible d'ouvrir le fichier include 'unistd.h'
[C++ Erreur] CFtpServer.h(65): E2209 Impossible d'ouvrir le fichier include 'pthread.h'
[C++ Erreur] CFtpServer.h(66): E2209 Impossible d'ouvrir le fichier include 'sys/socket.h'
[C++ Erreur] CFtpServer.h(67): E2209 Impossible d'ouvrir le fichier include 'netinet/in.h'
[C++ Erreur] CFtpServer.h(68): E2209 Impossible d'ouvrir le fichier include 'netinet/ip.h'
[C++ Erreur] CFtpServer.h(69): E2209 Impossible d'ouvrir le fichier include 'arpa/inet.h'
[C++ Erreur] CFtpServer.h(481): E2451 Symbole 'PATH_MAX' non défini
[C++ Erreur] CFtpServer.h(486): E2303 Nom de type attendu
[C++ Erreur] CFtpServer.h(486): E2139 ; manquant dans la déclaration
[C++ Erreur] CFtpServer.h(510): E2451 Symbole 'PATH_MAX' non défini
[C++ Erreur] CFtpServer.h(516): E2303 Nom de type attendu
[C++ Erreur] CFtpServer.h(516): E2139 ; manquant dans la déclaration
[C++ Erreur] CFtpServer.h(621): E2451 Symbole 'PATH_MAX' non défini
[C++ Erreur] CFtpServer.h(622): E2451 Symbole 'PATH_MAX' non défini
[C++ Erreur] CFtpServer.h(698): E2303 Nom de type attendu
[C++ Erreur] CFtpServer.h(698): E2139 ; manquant dans la déclaration
[C++ Erreur] CFtpServer.h(592): E2268 Appel à une fonction non définie 'close'
[C++ Erreur] Unit1.cpp(103): E2268 Appel à une fonction non définie 'usleep'
[C++ Avertissement] Unit1.cpp(106): W8066 Code inatteignable
Messages postés
16
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
29 janvier 2016

Salut, ton code a l'air très bien, mais dans l'exemple, je ne parviens pas à comprendre comment lancer un client et un serveur.
En sachant que moi, je souhaite me connecter à un serveur distant, et récupérer des fichiers (ou des parties de fichiers) sur le serveur. Est-ce possible ?
Dans ce cas, aurais-tu un client simple à disposition, car j'ai un peu de mal avec ton code ?

Merci d'avance.
Messages postés
1
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
3 avril 2006

bonjour,

visiblement ca marche pas en mode passif,
en pas sur le Wan en mode actif (mais la j'ai peut être pas tout compris !!!)


j'ai fait le test suivant : 2PCs en LAN ;
Le PC1 execute le serveur
PC1: run Example.exe
Le PC2 est le client !
Sur mon routeur vers l'exterieur j'ai forwardé le port 21 sur le PC1 j'ai essayé forwardé d'autre port sans succès !!!.

1) PC2: FTP (filezilla mode actif) vers PC1 par adresse LAN : test OK ;
2) PC2: FTP (filezilla mode passif) vers PC1 par adresse LAN : test NOK ;impossible de remonter la commande LIST
3) PC2: FTP (filezilla mode actif ou passif) vers par WAN ; NOK

ftp de la ligne de commande windows qui est en mode actif

1) FTP vers PC1 par adresse LAN : Test OK
2) FTP vers PC1 par adresse WAN : ERREUR 501 PORT ADDRESS DOES NOT MATCH ORIGINATOR


Question:

Je Fais Comment pour faire marcher ce serveur ?
Il serait interessant de debrousailler ce prblm car j'ai rien trouvé sur le net !!
A+
Messages postés
8
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
25 novembre 2005

merci d'avoir posté!
voila les modifications ont été faites, et le code mis a jour.

theBrowser
Afficher les 13 commentaires

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.