begin process at 2010 02 10 12:31:11
  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é :6 589 / 200

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 TIM_RESEAU, CLASSES POUR RESEAU COMPLET par williamallas
Source avec Zip INTERNET IP FINDER TROUVER VOS ADRESSE IP (INTERNET) par xmustapha
Source avec Zip CLIENT/SERVEUR AVEC TSOCKETSERVER & TCLIENTSOCKET par xmustapha
Source avec Zip REMOTE SHELL GEN par ganjarasta
PROXY IRC SIMPLE (WINDOWS/WINSOCK) par _michel

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...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,406 sec (3)

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