Maison >développement back-end >tutoriel php >Comment vérifier l'inclusion d'une adresse IP dans un sous-réseau CIDR ?

Comment vérifier l'inclusion d'une adresse IP dans un sous-réseau CIDR ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-18 19:35:03699parcourir

How to Verify IP Address Inclusion in a CIDR Subnet?

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

Pour déterminer si une adresse IPv4 appartient à un sous-réseau CIDR spécifié, une méthode simple implique le étapes suivantes :

Conversion en entiers longs :

  • Utilisez la fonction ip2long() pour convertir à la fois l'adresse IP et la plage de sous-réseau en entiers longs.

Dérivation du masque de sous-réseau :

  • Si le masque de sous-réseau n'est pas explicitement fourni (/xx), supposez un masque par défaut de /32.
  • Calculez le masque de sous-réseau en appliquant un décalage vers la gauche de 1 s à 32 moins la longueur du masque.

Comparaison au niveau des bits :

  • Effectuer une opération ET au niveau du bit entre l'entier long IP et le masque de sous-réseau.
  • Vérifiez si le résultat est égal à l'entier long du sous-réseau.

Mise en œuvre :

La fonction PHP suivante encapsule cette logique :

<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;
    return ($ip & $mask) == $subnet;
}</code>

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