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

Lo más fresco

  1. LPAD en SQL Server Nuevo
  2. Eliminar todos los objetos en SQL Server Modificado
  3. Dominio principal Nuevo
  4. Eliminar formato en Excel Nuevo

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Campo autonumérico
  3. Fecha y hora
  4. Cookies
  5. Convertir IP entre cadena y número

¿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 IP pertenece a la subred indicada, FALSE si no
 *
 * $str_ip (string): Dirección IP en formato '127.0.0.1'
 * $str_rango (string): Red y máscara en formato '127.0.0.0/8', '127.0.0.0/255.0.0.0' o '127.0.0.1'
 */

function ip_pertenece_a_red($str_ip, $str_rango){ // v2008-11-25
    // Extraemos la máscara
    @list($str_red, $str_mascara) = explode('/', $str_rango);
    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.

Esta página ha sido impresa el jueves 11 de marzo de 2010 (20:54:53 +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-2010 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com