Без описания |
Поиск в теме | Версия для печати |
RaZoR |
Отправлено: 07 Апреля, 2006 - 18:40:49
|
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 из хоста. |
|
|
TvoyWeb |
Отправлено: 07 Апреля, 2006 - 18:50:02
|
Главный здесь
Покинул форум
Сообщений всего: 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;
}
} |
|
|
SviMik |
Отправлено: 13 Апреля, 2006 - 14:34:25
|
Где-то там...
Покинул форум
Сообщений всего: 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 юзера либо быть просто звёздочкой. Сам лично не вижу необходимости в такой маске, ну на всякий случай...
У меня там была ещё удобная панель управления, записывалась дата забанивания, писались логи и т.д. но это уже не втему, поэтому тут баня демо версии. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (3): « 1 [2] 3 » |
Сейчас эту тему просматривают: 4 (гостей: 4, зарегистрированных: 0, скрытых: 0) |
« PHP/Perl » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|