Codage et décodage d'adresse ip [code en c]

Soyez le premier à donner votre avis sur cette source.

Vue 12 061 fois - Téléchargée 320 fois

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 / Exemple :


#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/ )

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
27 décembre 2004

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
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

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 :)
Messages postés
156
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
4 mars 2003

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
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

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
Messages postés
156
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
4 mars 2003

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