PDA

Просмотр полной версии : Забанить подсеть.


serg_1966
08.08.2009, 11:58
поделитесь скриптом.
Нужно забанить 10 посетей.
в файл закидаю ІР таким образом :
10.0.
10.1.
10.2.
192.168.
172.16.
і т.д.
Как реализовать бан на РНР.
Очень нужно. Помогите.

serg_1966
08.08.2009, 12:04
Или реализовать БАН всех кроме 2 ,3 ІР адресов.

Sharky
08.08.2009, 12:24
http://ru.php.net/manual/en/function.ip2long.php
http://ru.php.net/manual/en/function.long2ip.php

с обычными цифровыми значниями ипов я уже думаю поймёшь как поступить)

b3
08.08.2009, 12:30
Самый простй способ создаем ban.php

<?php
$ip = file('ban_ip.txt');
$count = count($ip);
for ($i=0;$i < $count;$i++) {
if($ip[trim($i)] == $_SERVER['REMOTE_ADDR'])
{
echo 'BANNED';
exit;
}
}
?>

И инклудим его на каждую страничку где нужно проверять. База IP хранится в ban_ip.txt

Ну а вообще лучше всего почитай про .htaccess

altblitz
08.08.2009, 12:34
... Ну а вообще лучше всего почитай про .htaccess
да. расово верно и даже православно.

Sharky
08.08.2009, 13:56
Самый простй способ создаем ban.php

<?php
$ip = file('ban_ip.txt');
$count = count($ip);
for ($i=0;$i < $count;$i++) {
if($ip[trim($i)] == $_SERVER['REMOTE_ADDR'])
{
echo 'BANNED';
exit;
}
}
?>

И инклудим его на каждую страничку где нужно проверять. База IP хранится в ban_ip.txt

Ну а вообще лучше всего почитай про .htaccess
А если надо забанить диапазон ипов?) А если это диапазон большой?) чё каждый ип забивать отдельно?) вы товарищ извращенец)

b3
08.08.2009, 14:52
Я предложил самый примитивный способ, выложил бы лучше, чем замечания делать =)
Для бана подсети нужно заносить в тхт в виде: 127.0.0.* а потом сравнивать по регулярному выражению, с условием что * - это любое число в диапе 0-255

mailbrush
08.08.2009, 15:52
Если надо на PHP:
ban.php
<?php

$file = array_map('trim', file('networks.txt')); #загоняем файл в массив
foreach ($file as $expression) #цикл - обработка каждого элемента массива

{
$expression = str_replace('.', '\.', $expression); #подгоняем строку под регулярку
$expression = str_replace('*', '(.*)', $expression); #подгоняем строку под регулярку
if (preg_match('#' . $expression . '#', $_SERVER['REMOTE_ADDR'])) #проверяем айпи по регулярке и в случае удачи
{
header('HTTP/1.1 403 Forbidden'); #отправляем заголовок 403 и
die("<title>BANNED NETWORK</title>\r\n\r\n<h1>Banned network!</h1>"); #выводим, что подсеть забанена
}
}

?>

networks.txt

127.*.0.1
255.*.*.*

Pashkela
08.08.2009, 16:37
в .htaccess лучше, имхо:

http://tools.dynamicdrive.com/userban/

fl00der
08.08.2009, 19:59
Короче order allow,deny
deny from 10.0
deny from 10.1
...
allow from all
Это пропиши в .htaccess, ну только вместо многоточия свои подсети. Или через iptables, если юникс на борту, не помню уже, как там, RTFM.

serg_1966
09.08.2009, 10:28
Всем спасибо. Розобрался !