Bon les adresses IP ce n'est pas notre spécialité, mais pour un début vous pouvez consulter Wikipédia pour commencer.

Sinon il faut retenir certaines choses :
  • Une adresse IP doit être unique (pour justement pouvoir la localiser)
  • Une adresse IP est assignée par des organismes comme l'InterNIC ou l'IANA suivant le type (mais ce n'est pas le sujet ici)
  • Un petit calcul nous permet de transfomer cette représentation numérique de 4 blocs en décimal (enfin ça nous intéresse !!!)

Le calcul de transformation d'une adresse IP vers un décimal :

ipnum = 16777216*w + 65536*x + 256*y + z
où l'adresse ip est représentée comme suit :
IP Address = w.x.y.z

Ou dans l'autre sens :

w = int ( ipnum / 16777216 ) % 256;
x = int ( ipnum / 65536 ) % 256;
y = int ( ipnum / 256 ) % 256;
z = int ( ipnum ) % 256;
Où % est l'opérateur Modulo

Je ne comprends pas moi même ce calcul, donc je ne pourrais plus vous l'expliquer ...

Par contre voici son exemple en code PHP et en Perl :

en PHP :
function iptonum($ip){
  $tab_ip = split("\.",$ip);
  $numip = 16777216 * (int)$tab_ip[0];
  $numip += 65536 * (int)$tab_ip[1];
  $numip += 256 * (int)$tab_ip[2];
  $numip += (int)$tab_ip[3];
  return $numip;
}


En Perl :
sub numToStr {
  my ($ipnum) = @_;
  my $z = $ipnum % 256;
  $ipnum >>= 8;
  my $y = $ipnum % 256;
  $ipnum >>= 8;
  my $x = $ipnum % 256;
  $ipnum >>= 8;
  my $w = $ipnum % 256;
  return "$w.$x.$y.$z";
}


Voilà normalement vous pouvez transformer n'importe quelle adresse IP et donc y trouver une correspondance dans la base de données IP