Dans de nombreuses applications réseau, il est nécessaire de vérifier si une adresse IP appartient à un sous-réseau CIDR donné. Cette question explore une méthode rapide et efficace pour de telles comparaisons.
Pour y parvenir, une fonction, cidr_match(), est utilisée. Il accepte deux paramètres : l'adresse IP au format quadruple pointé et le masque de notation CIDR.
La première étape consiste à convertir à la fois l'adresse IP et le sous-réseau en entiers longs à l'aide de ip2long( ). Le sous-réseau CIDR est ensuite analysé pour déterminer le masque de sous-réseau en fonction du nombre de bits spécifié.
Ensuite, une opération ET au niveau du bit est effectuée entre l'adresse IP et le masque de sous-réseau. Si le résultat correspond au sous-réseau, cela indique que l'adresse IP appartient au sous-réseau spécifié.
Voici l'extrait de code de la fonction cidr_match() :
function cidr_match($ip, $range) { list ($subnet, $bits) = explode('/', $range); if ($bits === null) { $bits = 32; } $ip = ip2long($ip); $subnet = ip2long($subnet); $mask = -1 << (32 - $bits); $subnet &= $mask; # nb: in case the supplied subnet wasn't correctly aligned return ($ip & $mask) == $subnet; }
En utilisant cette fonction, vous pouvez déterminer efficacement si une adresse IP appartient à un sous-réseau CIDR particulier. La simplicité et l'efficacité de cette approche la rendent adaptée à un large éventail d'applications liées aux réseaux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!