Serveur pour client telnet [g++]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 750 fois - Téléchargée 30 fois

Contenu du snippet

Je l'ai fait avec Kdevelop
C'est le squelette d'un serveur, il manque plus qu'a lui attribuer des fonctions (ce que je ferais dans la version 2, ainsi que un cryptage MD5 et d'autres foncionnalités, prévu pour bientot)

Source / Exemple :


/***************************************************************************
                          main.cpp  -  description
                             -------------------
    begin                : Sat Nov 29 17:56:06 UTC 2003
    email                : admin@cxczone.com
    NO COPYRIGHT OPENSOURCE WILL BE THE COMPUTERS ' FUTUR

                                                                                                                                                      • /
/***************************************************************************
  • *
  • This program is free software; you can redistribute it and/or modify *
  • it under the terms of the GNU General Public License as published by *
  • the Free Software Foundation; either version 2 of the License, or *
  • (at your option) any later version. *
  • *
                                                                                                                                                      • /
// au niveau de la définition des clients, il faudrait un random pour pouvoir avoir un serveur multiclient // ce problème, ainsi que d'autre fonctionnalité comme le cryptage md5 sera disponible dans la version 2.0 //Des fonctions au serveur seront ajouter car là c'est un peu vide #include <iostream.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> #include <sys/un.h> #include <arpa/inet.h> #include <unistd.h> void version(); namespace var { int PORT, s, connection; char *PASS = new char[6]; struct sockaddr_in saun; } class client { //class client, qui contiendra les fonctions du serveur, et toutes les informations du client public: int registerclient(char *IP); int veriflogin(char *PASST); int quit(); //ICI on ajoute les fonctions du serveurs private: char *IPCLIENT; int PORTCLIENT; char *PASSCLIENT; int GRANTED; }; int main() { using var::s; using var::connection; using var::saun; version(); cout << "\nPort : "; cin >> var::PORT; cout << "\nUsers'Pass : " ; cin >> var::PASS; system("clear"); cout << "\nLancement du serveur...\n"; //création de la socket if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("server: socket"); exit(1); } //Definition de la connection saun.sin_family = AF_INET; saun.sin_addr.s_addr = htonl(INADDR_ANY); saun.sin_port = htons(var::PORT); if (bind(s, (struct sockaddr *) &saun, sizeof(saun)) < 0){ perror("bind error"); exit(1); } //on ecoute la connection if (listen(s, 5) < 0){ perror("listen error"); exit(1); } char b[] = "\nTelnetServer-1.0\n"; //message de bienvenue //On accepte la connection if ((connection = accept(s, (struct sockaddr *) NULL, NULL)) < 0) { perror("accept error"); //pareil que pour la haut, si sa merde sa dit quel est l'érreur exit(1); } send(connection,b,sizeof(b),0); send(connection,inet_ntoa(saun.sin_addr),strlen(inet_ntoa(saun.sin_addr)),0); //on envoi l'adresse ip du client send(connection,"\n",sizeof("\n"),0); client client; //c'est ici qu'il faudra changer quelque chose si nous voulons un serveur multi-client client.registerclient(inet_ntoa(saun.sin_addr)); //on enregistre le client cout << "\nUne connection de " << inet_ntoa(saun.sin_addr) ; cout << "\n"; int out = 0; int verif = 0; char *buffer = new char[100]; do { memset(buffer,0,100); memset(b,0,sizeof(b)); if(recv(connection, buffer,20, 0) > 0) //pour eviter les buffer overflow { //ici les fonctions du serveurs si GRANTED = true !! if(strstr(buffer,"QUIT")) { client.quit(); } /**********VERIF PASS*/ if(strstr(buffer,"PASS")) { if(verif < 4) //pour eviter les attaques de brute force { send(connection,"\nLoging, please wait...\n",sizeof("\nLoging, please wait\n"),0); verif++; if(client.veriflogin(buffer) == 1) { send(connection,"\nACCESS GRANTED\n",sizeof("\nACCESS GRANTED\n"),0); cout << "\nAccès autorisé au client\n"; } else { send(connection,"\nACCESS DENIED\n",sizeof("\nACCESS DENIED\n"),0); } } else { send(connection,"\nBrute force attack detected !!!\n",sizeof("\nBrute force attack detected !!!\n"),0); cout << "Brute force attack detected !!!\n"; close(connection); } /*************VERIF PASS*/ } //pour demain, a faire: verfi brute force, buffer overflow, traitement du pass, fabrication des cmd serveurs, commentaires du prog } } while(out != true); close(connection); close(s); return EXIT_SUCCESS; } void version(void) { system("clear"); cout << "\n\n\tServeur paramètrable pour client Telnet 1.0\n"; } int client::registerclient(char *IP){ //pour enregistrer les infos du client dans la class IPCLIENT = IP; PORTCLIENT = var::PORT; return 0; } int client::veriflogin(char *PASST){ //verification du pass PASSCLIENT = PASST; if(strstr(PASSCLIENT, var::PASS)){ GRANTED = true; return 1; } return 0; } int client::quit(void) { send(var::connection,"\nGood bye :)\n",sizeof("\nGood bye :)\n"),0); close(var::connection); cout << "\nDeconnection de " << IPCLIENT; return 0; }

Conclusion :


voilà voilà :p

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
13 décembre 2004

hum hum bien bien mais je suis pas assez calé pour dire si c juste (surement oui) mais en tous cas clair et ça c du code kom je les aiment ;) ....
Messages postés
51
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
28 octobre 2004

Bon travail merci pour ton code ca ma été utile .. bon courage ..
Messages postés
267
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
27 novembre 2005

et fais un zip ;-)
Messages postés
38
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
31 décembre 2006

De toute facon je vais faire un random sur le nom de la variable qui utilisera la class car je veux un serveur multiclient donc on retrouvera pas ce pb dans la prochaine version
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

c'est un bon début :)

juste un petit conseil :
evite
client client;
(appeler un variable par le même nom que son type)

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.