Client-serveur : donnees cryptees xor

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 880 fois - Téléchargée 33 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

Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

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.
Messages postés
199
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
7 avril 2005

Ben pour windows, prends winsock2.h
Messages postés
157
Date d'inscription
jeudi 17 octobre 2002
Statut
Membre
Dernière intervention
11 septembre 2004

ba fo avoir linux et gcc
Messages postés
15
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
9 avril 2008

salut, j'ai besoin des fichiers d'en tête que tu as utilisé pour réaliser ce programme.
merci
Messages postés
1
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
30 juin 2003

a quoi correspondent les methodes sin_port, sin_addr et sin_family
(désolé, je débute)
Afficher les 6 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.