Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Блок по IP адресу... [2]
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (3): « 1 [2] 3 »   

> Без описания
ETC Администратор
Отправлено: 07 Апреля, 2006 - 18:18:12
Post Id



Flash-coder


Покинул форум
Сообщений всего: 5275
Дата рег-ции: Дек. 2003  
Откуда: TimeZero

Карма 26




Предлагаю изменить подход к проблеме и сделать правильно.
Т.е. не заморачиваться на конкретном случае.
Отталкиваться от мысли, что адресов может быть сколько угодно и вид они могут иметь любой (хосты или ипы) и ещё могут быть диапазоны этих самых хостов или ипов. Вот. Примера в два часа ночи писать не буду, думать нужно. Пока подумайте сами на этот счёт.
 
 Top
SviMik Супермодератор
Отправлено: 07 Апреля, 2006 - 18:31:31
Post Id



Где-то там...


Покинул форум
Сообщений всего: 3538
Дата рег-ции: Окт. 2004  
Откуда: Tallinn, Estonia

Карма 4




ETC пишет:
Примера в два часа ночи писать не буду

Так бы сразу и сказал Улыбка Если чесно, мне тоже в это время думается плохо, вот и спросил... Улыбка

CODE:
if($_SERVER['HTTP_X_FORWARDED_FOR']!=''){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}

$banlist='84.52.1.47, 127.0.0.1, 1.2.3.4, 4.3.2.1';

if(preg_match("/$ip/", $banlist){
die("тебе сюда нельзя!!!");
}

По идее должно пахать. тока по маске это надо подумать, по этому поводу я уже выше сказал Улыбка
 
 Top
RaZoR
Отправлено: 07 Апреля, 2006 - 18:40:49
Post Id



Full Member


Покинул форум
Сообщений всего: 225
Дата рег-ции: Март 2005  
Откуда: Оренбург

Карма 0




кажется, я уже где-то постил эту функцию, но вот еще раз
CODE:
function testip($range,$ip)
{
$result=1;
$maskocts=split("\.",$range);
$ipocts=split("\.",$ip);
for ($i=0;$i<4;$i++)
{
if (ereg("\[([0-9]+)\-([0-9]+)\]",$maskocts[$i],$regs))
{
if (($ipocts[$i]>$regs[2])||($ipocts[$i]<$regs[1])) $result=0;
}
else
{
if ($maskocts[$i]<>$ipocts[$i]) $result=0;
}
}
return $result;
}

использовать так
CODE:
echo testip('192.128.[13-19].[1-58]','192.128.19.58');
, где сначала указывается забаненный IP (можно с маской), а затем проверяемый IP.
можно теперь перед проверкой добавить получение IP из хоста.
 
 Top
TvoyWeb Администратор
Отправлено: 07 Апреля, 2006 - 18:50:02
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




Лучше всего хранить IP-шники уже в виде Regexp шаблона и в виде массива.
Например так:
CODE:
$ip_array = Array (
[0] => 82\.151\.102\.\d{1,3},
[1] => 195\.58\.229\.\d{1,3},
[2] => 82\.209\.217\.163,
[3] => 195\.245\.185\.18,
[4] => 66\.202\.75\.19,
[5] => 82\.209\.228\.126,
[6] => 59\.120\.0\.127,
[7] => 66\.197\.205\.5
)
$ip = 'текущий IP пользователя';
foreach ($ip_array as $b_ip) {
if (preg_match("#^$b_ip#",$ip)) {
die("С новым годом! Пошел нафик");
break;
}
}
 
 Top
RaZoR
Отправлено: 12 Апреля, 2006 - 21:38:25
Post Id



Full Member


Покинул форум
Сообщений всего: 225
Дата рег-ции: Март 2005  
Откуда: Оренбург

Карма 0




TvoyWeb
как вариант да, но таким образом нельзя заблокировать доступ для определенного диапазона IP. допустим 192.167.19.[15-19].. только 192.167.19.*
 
 Top
TvoyWeb Администратор
Отправлено: 13 Апреля, 2006 - 06:34:25
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




RaZoR пишет:
допустим 192.167.19.[15-19].. только 192.167.19.*

Ну это просто надо подумать как сформировать шаблон.
 
 Top
SviMik Супермодератор
Отправлено: 13 Апреля, 2006 - 14:34:25
Post Id



Где-то там...


Покинул форум
Сообщений всего: 3538
Дата рег-ции: Окт. 2004  
Откуда: Tallinn, Estonia

Карма 4




Пишу сейчас один скрипт. Вот, выдрал. Чуть ли не самое ценное в нём Улыбка
Зы. Професионалов прошу не смеятся. Знаю что наверняка можно было сделать и проще\короче\компактнее. Сделал как умею. Улыбка Но оно пашет!
CODE:

if($_SERVER['HTTP_X_FORWARDED_FOR']!=''){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}

list($ip1, $ip2, $ip3, $ip4) = split('[.]', $ip);

$banlist = fopen('banlist.txt','r');

$tmpb = fgets($banlist);
while($tmpb && $banned!='1'){

list($tmpb1, $tmpb2, $tmpb3, $tmpb4, $reason) = split('[.]', $tmpb);

if($tmpb1==$ip1 | $tmpb1=='*'){
if($tmpb2==$ip2 | $tmpb2=='*'){
if($tmpb3==$ip3 | $tmpb3=='*'){
if($tmpb4==$ip4 | $tmpb4=='*'){
$banned='1';
}
}
}
}

$tmpb = fgets($banlist);
}

fclose($banlist.dat);

if(!$reason){$reason='Не указана';}

if($banned=='1'){
die('Вы забанены. Причина: '.$reason);

ЗЫ. При копировании отдельных кусков и дописывании мог пропустить какую-нидь скобку.Это на случай если не заработает, т.к. конкретно этот код не проверял.

Файл banlist.txt:
CODE:

84.52.1.47.Тест.
84.52.*.*.Забаним полгорода.
127.0.0.1.Сам дурак.
*.*.*.*.У админа плохое настроение! =).
1.2.3.4..

В конец каждой строки ставится точка (чтобы избежать обработки переноса строки). Если причина не указана - оставляете просто точку (и точку в конце строки. Итого 2 точки).
NB! Скрипт не понимает маски вида 84.52.1.4* Алгоритм заключается в делении айпишника на 4 части. И каждая часть должна либо совпасть с IP юзера либо быть просто звёздочкой. Сам лично не вижу необходимости в такой маске, ну на всякий случай...

У меня там была ещё удобная панель управления, записывалась дата забанивания, писались логи и т.д. но это уже не втему, поэтому тут баня демо версии. Язычок
 
 Top
TvoyWeb Администратор
Отправлено: 13 Апреля, 2006 - 15:51:42
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




2ALL
Посмотрите как записываются забаненные IP адреса в базу. Во время записи идет построение шаблона для будущего сравнения. При желании можно модифицировать скрипт, чтобы можно было банить по маске как писал RaZoR
 
 Top
SviMik Супермодератор
Отправлено: 13 Апреля, 2006 - 16:05:36
Post Id



Где-то там...


Покинул форум
Сообщений всего: 3538
Дата рег-ции: Окт. 2004  
Откуда: Tallinn, Estonia

Карма 4




TvoyWeb
А где же скрипт который записывает адреса в базу? Раз такая сложная запись, то ессно не вручную должны эти Regexp составлятся...
 
 Top
TvoyWeb Администратор
Отправлено: 13 Апреля, 2006 - 16:25:08
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




SviMik
Там же. Смотри в папке модуля.
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0, скрытых: 0)
« PHP/Perl »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0489]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33