Hola
Necesito una funcion que haga lo mismo que esta que pongo mas abajo, mi fuerte no son las redes y no tengo ni papa de C.
Alguien puede echar una mano con esto a ver si se puede traducir a delphi o sabe de otra funcion ya desarrollada en delphi que haga lo mismo?
Un saludo y muchas gracias.
Paco.
Código:
/**
* 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;
}