begin process at 2012 02 09 08:59:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > CODAGE ET DÉCODAGE D'ADRESSE IP [CODE EN C]

CODAGE ET DÉCODAGE D'ADRESSE IP [CODE EN C]


 Information sur la source

Note :
1,5 / 10 - par 2 personnes
1,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Niveau :Débutant Date de création :21/02/2003 Date de mise à jour :25/02/2003 20:39:20 Vu / téléchargé :8 792 / 219

Auteur : leneuf22

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Ce code permet de coder (on ne peut pas parler de cryptage) une adresse IP "classique" (de forme 127.127.127.127, vers sa forme entière en int sur 32 bits, c'est à dire 2139062143 ici) et bien entendu de faire le contraire.
(les 2 types d'adresse sont acceptées par les navigateurs, les clients FTP, etc...)

Mon premier but était d'expliquer la procédure de décodage que l'on m'a demandée plusieurs fois (et aussi de montrer à certains sceptiques l'utilité des opérateurs binaires :-) )

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <string.h>
  • int main(void)
  • {
  • //va contenir la saisie
  • char IP[24];
  • //compteur de points dans l'adresse
  • int point=0;
  • //va contenir les 4 parties de l'adresse en numérique
  • unsigned int aiIP[4];
  • //va contenir l'IP alternative qui est sous forme d'int32
  • unsigned int IPAlt;
  • puts("Entrez une adresse IP\n");
  • gets(IP);
  • int j=0;
  • do {
  • if(IP[j] == '.')
  • point++;
  • else if(IP[j]<48 || IP[j]>57) {
  • puts("Entree incorrecte !");
  • getchar();
  • return -1;
  • }
  • } while(IP[++j]);
  • if(point==3) {
  • sscanf(IP, "%u.%u.%u.%u", aiIP, aiIP+1, aiIP+2, aiIP+3);
  • if(aiIP[0] > 255 || aiIP[1] > 255 || aiIP[2] > 255 || aiIP[3] > 255) {
  • //nombre supérieur à 255 : erreur de saisie
  • puts("Entree incorrecte !");
  • getchar();
  • return -1;
  • }
  • //Codage de l'adresse
  • IPAlt = (aiIP[0]<<24) | (aiIP[1]<<16) | (aiIP[2]<<8) | aiIP[3];
  • printf("IP alternative : %u\nAppuyez sur ENTREE pour continuer . . .", IPAlt);
  • }
  • else if(!point) {
  • IPAlt = (unsigned int)atoi(IP);
  • for(unsigned int i=0; i<4; i++)
  • aiIP[i] = (IPAlt & (0xFF000000 >> (i<<3))) >> ((3^i)<<3);
  • /* on prend les 8 bits de poids le plus fort, on les décale à droite
  • et on les sauve puis on prend les 8 suivants, on les décale à droite
  • et on les sauve, et ainsi de suite.... */
  • printf("Adresse IP : %u.%u.%u.%u\nAppuyez sur ENTREE pour continuer . . .", aiIP[0], aiIP[1], aiIP[2], aiIP[3]);
  • }
  • else {
  • puts("Entree incorrecte !");
  • getchar();
  • return -1;
  • }
  • getchar();
  • return 0;
  • }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
  //va contenir la saisie
  char IP[24];

  //compteur de points dans l'adresse
  int point=0;

  //va contenir les 4 parties de l'adresse en numérique
  unsigned int aiIP[4];

  //va contenir l'IP alternative qui est sous forme d'int32
  unsigned int IPAlt;

  puts("Entrez une adresse IP\n");
  gets(IP);

  int j=0;
  do {
    if(IP[j] == '.')
      point++;
    else if(IP[j]<48 || IP[j]>57) {
      puts("Entree incorrecte !");
      getchar();
      return -1;
    }
  } while(IP[++j]);

  if(point==3) {

    sscanf(IP, "%u.%u.%u.%u", aiIP, aiIP+1, aiIP+2, aiIP+3);
      
    if(aiIP[0] > 255 || aiIP[1] > 255 || aiIP[2] > 255 || aiIP[3] > 255) {
      //nombre supérieur à 255 : erreur de saisie
      puts("Entree incorrecte !");
      getchar();
      return -1;
    }

    //Codage de l'adresse
    IPAlt = (aiIP[0]<<24) | (aiIP[1]<<16) | (aiIP[2]<<8) | aiIP[3];

    printf("IP alternative : %u\nAppuyez sur ENTREE pour continuer . . .", IPAlt);
  }
  else if(!point) {

    IPAlt = (unsigned int)atoi(IP);

    for(unsigned int i=0; i<4; i++)
      aiIP[i] = (IPAlt & (0xFF000000 >> (i<<3))) >> ((3^i)<<3);


/* on prend les 8 bits de poids le plus fort, on les décale à droite
et on les sauve puis on prend les 8 suivants, on les décale à droite
et on les sauve, et ainsi de suite.... */

    printf("Adresse IP : %u.%u.%u.%u\nAppuyez sur ENTREE pour continuer . . .", aiIP[0], aiIP[1], aiIP[2], aiIP[3]);
  }
  else {
    puts("Entree incorrecte !");
    getchar();
    return -1;
  }

  getchar();
  return 0;
}

 Conclusion

(compilé avec LCC-Win32 : http://www.cs.virginia.edu/~lcc-win32/ )

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • ip.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 837 octets
  • ip.exeTélécharger ce fichier [Réservé aux membres club]8 644 octets

Télécharger le zip


 Sources de la même categorie

Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas
Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
Source avec Zip Source avec une capture SUIVI DE PRODUCTION ONDULEUR PHOTOVOLTAÏQUE SOLARMAX par brunovan
Source avec Zip MINICHAT MULTI-CLIENT par wisar
SOCKET CPP par baptchr55

Commentaires et avis

Commentaire de VestaX le 29/01/2004 23:15:26

salut!! voilà je trouve ta source vraiment tres interessante. Mais le probleme c'est queje ne conné absolument rien en cpp. Alors j'ai téléchargé lc win32 comme tu l'as dit. Mais rien a faire je ne comprend absolument rien. J'ai fais un copier coller de ta source mais je ne sais pas comment l'executer en .exe (je suis vraiment un débutant) serais t'il possible de le faire en MIRC ou encore en VSB ?? merci d'avance. Car pour moi ta source est vraiment tres importante. Il faudrais vraiment que tu me donne un coup de pouce. Merci d'avance j'attend de tes nouvelles au plus vite. A tres bientot et merci encore :)

Commentaire de leneuf22 le 30/01/2004 17:55:06

Oui, c'est possible de faire ceci en VBS :)
Bien sur, sans prise en main directe des chaines de caractères, tu devras passer par des Left, Right, et len.

Les opérateurs binaires existent en VBS :
or, and, xor

Commentaire de VestaX le 30/01/2004 17:59:43

hmm voilà je sais que je vais etre chiant mais pourrais tu me le faire?? car je ne conné que le scripting :,( Si tu pouvais me faire un petit programe en VSB executable en .exe ce serais super de ta part de bien vouloir me l'envoyer par email!! vestax-mix@wanadoo.fr je sais que tu dois te dire que j'en demande beaucoup mais ta source est de l'or pour moi!!! Il me la faut a tout pris. Je t'en remercie d'avance. @bientot

Commentaire de leneuf22 le 31/01/2004 00:23:40

Heu, si c'est juste l'exécutable qu'il te faut, je peux t'envoyer le mien, issu du code que j'ai posté.
De plus un VBS n'est pas compilable en exécutable .exe

Commentaire de VestaX le 31/01/2004 18:01:39

ben houais!! Si tu en as crée un pour toi ce serais super sympas de ta part de me l'envoyer par mail!! Mais si tu me l'envoie il faut l'ouvrir comment?? c'est un .exe ?? ou si c'est un fichier .cpp je l'ouvre comment?? Bon j'attend de tes nouvelles merci encore :)

Commentaire de etrenger le 27/12/2004 15:46:06

j'ai essayé de recompiler ton code , mais la taille de l'exe est de 34 kb , tandis que le tien ne fait que 8 kb , (j'ai enlever le mode debug) .
peut tu me dire commment configuerer le compilateur ?

merci d'avance  

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,810 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales