borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Reemplazar selección con JavaScript Nuevo
  2. ¿Esta IP pertenece a esta red? Modificado
  3. Mozilla Firefox Modificado

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Fecha y hora
  3. Campo autonumérico
  4. Rotar logs en Windows
  5. Reiniciar Apache con cuidado (graceful restart)
Compartir esta página

¿Esta IP pertenece a esta red?

Esta función nos dice si una dirección IP dada pertenece a una determinada subred. El código es válido para IPv4.

/**
 * Devuelve TRUE si la dirección IPv4 dada pertenece a la subred indicada, FALSE si no
 *
 * @param string $str_ip Dirección IP en formato '127.0.0.1'
 * @param string $str_rango Red y máscara en formato '127.0.0.0/8', '127.0.0.0/255.0.0.0' o '127.0.0.1'
 * @return bool
 *
 * @version v2011-08-30
 */

function ip_pertenece_a_red($str_ip, $str_rango){
    // Extraemos la máscara
    list($str_red, $str_mascara) = array_pad(explode('/', $str_rango), 2, NULL);
    if( is_null($str_mascara) ){
        // No se especifica máscara: el rango es una única IP
        $mascara = 0xFFFFFFFF;
    }elseif( (int)$str_mascara==$str_mascara ){
        // La máscara es un entero: es un número de bits
        $mascara = 0xFFFFFFFF << (32 - (int)$str_mascara);
    }else{
        // La máscara está en formato x.x.x.x
        $mascara = ip2long($str_mascara);
    }

    $ip = ip2long($str_ip);
    $red = ip2long($str_red);
    $inf = $red & $mascara;
    $sup = $red | (~$mascara & 0xFFFFFFFF);

    return $ip>=$inf && $ip<=$sup;
}

Se puede usar, por ejemplo, en un sistema de control de acceso con restricción por IP, comparando la dirección del visitante con cada rango autorizado.

Historial

v2011-08-30
Deshacerse del operador @ y mejorar la documentación.
v2008-11-25
Primera versión.

Esta página ha sido impresa el miércoles 8 de febrero de 2012 (01:49:51 +0100) desde http://borrame.com/recortes/php/ip-pertenece-a-red.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2011 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com