Блок определенный блок IP с моего веб-сайта в PHP

Я хотел бы, например, заблокировал бы каждый IP от основы 89.95 (89.95..). Я не имею .htaccess файлы на моем сервере, таким образом, я должен буду сделать это с PHP.

if ($_SERVER['REMOTE_ADDR'] == "89.95.25.37") die();

Заблокировал бы определенный IP. Как я могу заблокировать все блоки IP?

Большое спасибо.

11
задан iTayb 19 May 2010 в 22:26
поделиться

4 ответа

Попробуйте strpos ()

if(strpos($_SERVER['REMOTE_ADDR'], "89.95") === 0)
{
    die();
}

Если вы заметили, оператор === гарантирует, что 89.95 находится в начале IP-адреса. адрес. Это означает, что вы можете выделить столько IP-адреса, сколько захотите, и он будет блокироваться независимо от того, какие числа идут после него.

Например, все они будут заблокированы:

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

(хотя некоторые из них недействительны)

13
ответ дан 3 December 2019 в 05:33
поделиться

Используйте ip2long () для преобразования десятичного числа с точками в реальный IP-адрес. Тогда вы сможете легко делать диапазоны.

Просто выполните ip2long () для верхнего и нижнего диапазона, чтобы получить значение, а затем используйте их как константы в своем коде.

Если вы знакомы с маскированием подсети, вы можете сделать это следующим образом:

// 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");
}

Или, если вы знакомы с этим форматом 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");
}

Вы можете включить эти в функции и имеют очень управляемый код, что упрощает добавление IP-адресов и настройку диапазонов.

4
ответ дан 3 December 2019 в 05:33
поделиться

Сделайте подстроку :) Например, для блокировки 89.95.25. * Вы создаете подстроку IP-адреса, отсекая последние два числа и сравнивая ее с «89.95.25.»

1
ответ дан 3 December 2019 в 05:33
поделиться

Преобразуйте четырехугольник с точками в целое число:

$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));

// only allow 10.0.0.0 – 10.255.255.255
if (!($ip >= 167772160 && $ip <=  184549375)) {
    die('Forbidden.');
}
3
ответ дан 3 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: