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

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

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

Блокирует определенный IP-адрес. Как заблокировать целые блоки IP?

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

Попробуйте 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

(некоторые из них не являются действительными IP-адресами, хотя)

Используйте ip2long() для преобразования десятичного десятичного 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-адресов и настройку диапазонов.

Преобразуйте пунктирный квадрат в целое число:

 $ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])); // only allow 10.0.0.0 – 10.255.255.255 if (!($ip >= 167772160 && $ip <= 184549375)) { die('Forbidden.'); } 

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

 $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 } 

Это всегда срабатывало для меня очень хорошо: это проверяет правильные серверные переменные и сравнивает их со списком известных IP-адресов .. и да, PHP действительно понимает подстановочные знаки, поэтому используйте * внутри IP-адреса, помогая блокировать диапазоны 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; } 

В скоропортящейся прессе есть отличная статья: http://perishablepress.com/how-to-block-ip-addresses-with-php/

используя код возрождения, используйте это для поиска подстановочного поиска

 // 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; } } } 
 $deny = array("111.111.111", "222.222.222", "333.333.333"); if (in_array($_SERVER['REMOTE_ADDR'], $deny)) { header("location:http://www.google.com/"); exit(); }