Client-serveur : donnees cryptees xor

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 165 fois - Téléchargée 35 fois

Contenu du snippet

le serveur envoie un message crypté avec XOR, la clé est le n°de port
le cliet recois les données et les décrypte avec la clé (le port)

serveur arguments : PORT MESSAGE
client arguments : HOTE PORT

activez le serveur avec un message et faite telnet [127.0.0.1] [n°port] : il recoit les données...cryptées

le cryptage n'est pa super puissant mai c juste pour donné l'idée

Source / Exemple :


//#######################SERVEUR#########################"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

int main(int argv,char*argc[])
{
 system("clear");

 int sock,nsock, cle = atoi(argc[1]), n;
 struct sockaddr_in sin;

 char msg[255], buffer[255];
 strcpy(msg, argc[2]);
  for(n = 0; n < (strlen(msg) + 1); n++)
  {
   buffer[n] = msg[n] ^ cle;
  }

 sin.sin_family      = AF_INET;
 sin.sin_addr.s_addr = INADDR_ANY;
 sin.sin_port        = htons(atoi(argc[1]));
 bzero(&(sin.sin_zero),8);

 sock = socket(AF_INET,SOCK_STREAM,0);

 printf(" port %s en écoute...\n", argc[1]);
 bind(sock, (struct sockaddr *)&sin, sizeof(struct sockaddr));
 listen(sock,50);

  while(1)
  {
   int sin_size = sizeof(struct sockaddr_in);
   nsock = accept(sock,(struct sockaddr *)&sin,&sin_size);
   printf("  connection de %s sur le port %s\n",inet_ntoa(sin.sin_addr),argc[1]);
   send(nsock,buffer,sizeof(buffer),0);
  }

 close(nsock);
 return 0;
}

//#######################CLIENT##############################
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

int main(int argv,char*argc[])
{
 system("clear");

 char buffer[255], mot[255];
 int sock, cle = atoi(argc[2]), n;
 struct sockaddr_in sin;

 sin.sin_family      = AF_INET;
 sin.sin_addr.s_addr = inet_addr(argc[1]);
 sin.sin_port        = htons(atoi(argc[2]));
 bzero(&(sin.sin_zero),8);

 sock = socket(AF_INET,SOCK_STREAM,0);

 printf(" tentative de connection sur %s / %s...\n", argc[1], argc[2]);
 connect(sock,(struct sockaddr*)&sin,sizeof(struct sockaddr));
 printf("  connecté %s / %s\n", argc[1], argc[2]);

 recv(sock,buffer,sizeof(buffer),0);
    for(n = 0; n < (strlen(buffer) + 1); n++)
    {
      mot[n] = buffer[n] ^ cle;
    }
 printf("  buffer: %s\n", mot);

 close(sock);
 return 0;
}

Conclusion :


gcc serveur.c -o serveur
gcc client.c -o client

serveur 1245 coucou!
client 127.0.0.1 1245

A voir également

Ajouter un commentaire Commentaires
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
13 nov. 2003 à 20:02
a quoi correspondent les methodes sin_port, sin_addr et sin_family
(désolé, je débute)

=> son programme est écrit en C, qui ne contient pas d'objets, donc pas de méthodes.

struct sockaddr_in sin; => sockaddr_in est une structure, c'est un groupement de variables (comme les Type ... End Type en vb)
sin_port, sin_addr et sin_family sont des variables de ce groupement.
GFACTION Messages postés 199 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 avril 2005
4 nov. 2003 à 22:18
Ben pour windows, prends winsock2.h
Krox68 Messages postés 157 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 11 septembre 2004 1
10 juil. 2003 à 19:34
ba fo avoir linux et gcc
cs_Narcissus Messages postés 15 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 9 avril 2008
10 juil. 2003 à 18:19
salut, j'ai besoin des fichiers d'en tête que tu as utilisé pour réaliser ce programme.
merci
berimbo Messages postés 1 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 30 juin 2003
30 juin 2003 à 15:00
a quoi correspondent les methodes sin_port, sin_addr et sin_family
(désolé, je débute)

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.