Maison  >  Article  >  développement back-end  >  Comment vérifier si une adresse IP appartient à un sous-réseau CIDR ?

Comment vérifier si une adresse IP appartient à un sous-réseau CIDR ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-18 19:32:03579parcourir

How to Verify if an IP Address Belongs to a CIDR Subnet?

Vérification de l'inclusion IP dans un sous-réseau CIDR

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.

Méthode

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é.

Implémentation

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn