Explication du calcul de la plage d'ip, le numIP
Par Thierry, lundi 15 septembre 2008 à 15:35 :: Localiser son IP en explications :: Explication du calcul de la plage d'ip, le numIP :: rss
Alors là franchement ce n'est pas totalement clair pour nous aussi.
Mais on peut tout de même commencer à expliquer certaines choses et surtout vous donner le calcul qui vous permettra d'interroger la base de données IP.
Mais on peut tout de même commencer à expliquer certaines choses et surtout vous donner le calcul qui vous permettra d'interroger la base de données IP.
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 :
Par contre voici son exemple en code PHP et en Perl :
en PHP :
En Perl :
Voilà normalement vous pouvez transformer n'importe quelle adresse IP et donc y trouver une correspondance dans la base de données IP
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 + zOu dans l'autre sens :
où l'adresse ip est représentée comme suit :
IP Address = w.x.y.z
w = int ( ipnum / 16777216 ) % 256;Je ne comprends pas moi même ce calcul, donc je ne pourrais plus vous l'expliquer ...
x = int ( ipnum / 65536 ) % 256;
y = int ( ipnum / 256 ) % 256;
z = int ( ipnum ) % 256;
Où % est l'opérateur Modulo
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
Commentaires
1. Le mardi 22 décembre 2009 à 12:40, par Sarigue
2. Le mercredi 23 décembre 2009 à 13:56, par Geolocalise Ip
3. Le samedi 16 octobre 2010 à 22:21, par Aurélien
4. Le lundi 18 octobre 2010 à 07:50, par Ip géolocalisation
Ajouter un commentaire