Salut a tous :hello:
Je dois manipuler en php des ip en binaire
ex: 192.168.191.0 donne 11000000.10101000.10111111.00000000,
je lis c’est ip dans un fichier (cf: mon topic extraction tag=valeur :paf:)
je souhaite ensuite faire quelques opérations sur ces ip en binaire, comme par exemple verifier que ip*netmask=network pour verifier que l’ip apartient bien a ce sous-reseau.
j’aimerais aussi calculer le broadcast a partir du network et netmask.
j’ai donc fait ces fonctions:
# convertit un ipV4 ou V6 en binaire
function ip2bin($ip){
$octets=explode(".",$ip);
for($i=0;$i<sizeof($octets);$i++){
$octets[$i]=str_pad(decbin((int)$octets[$i]),8,"0",STR_PAD_LEFT);
$retour.=$octets[$i];
}
return $retour;
}
# comparaison ET bit a bit de 2 strings
function cmpETstr($str1,$str2){
for($i=0;$i<strlen($str1);$i++)
if($str1{$i}=="1" && $str2{$i}=="1")
$retour.="1";
else
$retour.="0";
return $retour;
}
# retourne 1 si adress correspond au couple network netmask 0 sinon
function isInSubNet($adress,$network,$netmask){
if( (!strcmp(cmpETstr(ip2bin($adress),ip2bin($netmask)),ip2bin($network))) )
return 1;
else
return 0;
}
Ca marche mais en partant d’une string j’ai du manipuler characteres par characteres.
Y’a t’il une facon plus directe de faire cela en manipulant l’ip bit-a-bit avec l’operateur & (l’ip comme un entier de 4octets soit 32bits) et donc sans faire une fonction cmpETstr ?
cf: fromscratch.dyndns.org/analyse_hosts/verif_adr_netwm2.php
Cordialement