
iTayb
Me gustaría, por ejemplo, bloquear todas las IP desde la base 89.95 (89.95..). no tengo .htaccess
archivos en mi servidor, así que tendré que hacerlo con PHP.
if ($_SERVER['REMOTE_ADDR'] == "89.95.25.37") die();
Bloquearía una IP específica. ¿Cómo puedo bloquear bloques completos de IP?

tyler carter
Tratar strpos()
if(strpos($_SERVER['REMOTE_ADDR'], "89.95") === 0)
{
die();
}
Si te fijas, el ===
El operador se asegura de que el 89.95
esta en el comenzando de la dirección IP. Esto significa que puede especificar toda la dirección IP que desee, y se bloqueará sin importar qué números vengan después.
Por ejemplo, todos estos serán bloqueados:
89.95 -> 89.95.12.34
, 89.95.1234.1
, 89.95.1.1
89.95.6 -> 89.95.65.34
, 89.95.61.1
, 89.95.6987
(aunque algunas de esas no son direcciones IP válidas)

marcus adams
Usar ip2long()
para convertir puntos decimales a una dirección IP real. Entonces puedes hacer rangos fácilmente.
Solo haz ip2long()
en el rango alto y bajo para obtener el valor, luego utilícelos como constantes en su código.
Si está familiarizado con el enmascaramiento de subred, puede hacerlo así:
// Deny 10.12.*.*
$network = ip2long("10.12.0.0");
$mask = ip2long("255.255.0.0");
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if (($network & $mask) == ($ip & $mask)) {
die("Unauthorized");
}
O si está familiarizado con este formato 10.12.0.0/16
:
// Deny 10.12.*.*
$network = ip2long("10.12.0.0");
$prefix = 16;
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if ($network >> (32 - $prefix)) == ($ip >> (32 - $prefix)) {
die("Unauthorized");
}
Puede convertirlos en funciones y tener un código muy manejable, lo que facilita agregar direcciones IP y personalizar los rangos.

webbiedave
Convierta el cuádruple punteado en un número entero:
$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
// only allow 10.0.0.0 – 10.255.255.255
if (!($ip >= 167772160 && $ip <= 184549375)) {
die('Forbidden.');
}
Haz una subcadena 🙂 Por ejemplo, para bloquear 89.95.25.*, crea una subcadena de la IP, corta los dos últimos números y compárala con “89.95.25”.

Sumith Harshan
$user_ip = $_SERVER['REMOTE_ADDR']; // get user ip
$denyIPs = array("111.111.111", "222.222.222", "333.333.333");
if (in_array ($user_ip, $denyIPs)) {
// blocked ip
}
else {
// not blocked
}

reanimar
Esto siempre me ha funcionado muy bien: verifica las variables de servidor adecuadas y las compara con una lista de IP conocidas… y sí, PHP entiende los comodines, por lo que usar * dentro de la IP ayuda a bloquear rangos de IP.
// The blacklisted ips.
$denied_ips = array(
'1.2.3.4',
'2.3.*',
);
// The function to get the visitor's IP.
function getUserIP(){
//check ip from share internet
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
//to check ip is pass from proxy
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
//The user
$visitorIp = getUserIP();
// Now let's search if this IP is blackliated
$status = array_search($visitorIp, $denied_ips);
// Let's check if $status has a true OR false value.
if($status !== false){
echo '<div class="error">Your IP has been banned! Stop spamming us!</div>';
// header("Location: http://zombo.com");
// exit;
}
También hay un gran artículo en Perishable Press:
http://perishablepress.com/how-to-block-ip-addresses-with-php/

ingeniosohacker
usando el código de revive, use esto para que funcione la búsqueda con comodines
// Now let's search if this IP is blackliated
$status = false;
foreach($denied_ips as $val)
{
if (strpos($val,'*') !== false)
{
if(strpos($visitorIp, array_shift(explode("*", $val))) === 0)
{
$status = true;
break;
}
}
else
{
if(strcmp($visitorIp, $val) === 0)
{
$status = true;
break;
}
}
}
.