PHP : Vérifier l’appartenance d’une IP à un CIDR

Le 7 février 2013 — par

GitHub a mis à jour son API pour ajouter Meta qui retourne des infos concernant l’état de l’API, et notamment les IP d’où proviennent les Services Hooks, indispensable pour sécuriser un minimum vos hooks personnalisés.

Comme le retour ne spécifie pas des IP mais des CIDR, il faut vérifier que l’IP appartient au CIDR donné (même s’il n’y a que des /32 pour le moment).

Voici une petite fonction qui permet de faire cela :

/**
 * @param string $ip   IP address to test
 * @param string $cidr CIDR mask to match with
 *
 * @return bool
 */
function ipCIDRCheck($ip, $cidr)
{

    list ($net, $mask) = explode('/', $cidr);

    $ipNet = ip2long($net);
    $ipMask = ~((1 << (32 - $mask)) - 1);

    $ipIp = ip2long($ip);

    $ipIpNet = $ipIp & $ipMask;

    return ($ipIpNet == $ipNet);

}

// return true
var_dump(ipCIDRCheck('192.168.1.23', '192.168.1.0/24'));

// return false
var_dump(ipCIDRCheck('192.168.1.23', '192.168.1.1/32'));
S'abonner au flux RSS du blog
Recevoir les nouveaux articles par e-mail :