Dans le domaine de la configuration réseau, déterminer si une adresse IP appartient à un sous-réseau CIDR spécifique est une tâche courante. Cet article présente une méthode simple pour y parvenir à l'aide de fonctions intégrées rudimentaires.
L'algorithme repose sur la conversion de l'adresse IP et de la plage de sous-réseau CIDR en entiers longs à l'aide de ip2long( ) fonction. Ensuite, le masque de sous-réseau correspondant à la notation /xx dans la plage CIDR est calculé.
La dernière étape consiste à effectuer une opération « et » au niveau du bit entre l'adresse IP et le masque de sous-réseau. Si le résultat correspond au sous-réseau, l'adresse IP fournie peut être confirmée comme résidant dans le sous-réseau spécifié.
Le code ci-dessous fournit une implémentation de l'algorithme susmentionné :
<code class="php">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; // Adjust subnet alignment if necessary return ($ip & $mask) == $subnet; }</code>
Cette fonction peut être utilisée comme suit :
<code class="php">$ips = array('10.2.1.100', '10.2.1.101', '10.5.1.100', '1.2.3.4'); foreach ($ips as $IP) { if (cidr_match($IP, '10.2.0.0/16') == true) { print "You're in the 10.2 subnet\n"; } }</code>
Ce code affichera :
You're in the 10.2 subnet You're in the 10.2 subnet
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!