Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Бан по IP-диапазону
 
 автор: method   (03.08.2005 в 04:57)   письмо автору
 
 

как забанить по отдельно_взятому IP это понятно.....
а как осуществить бан по диапазону IP адресов?

Помогите разобраться вот на таком примерчике:

Человек приходит с адреса 217.115.179.72

в БД записан диапазон запрещённых адресов:217.115.160.0 - 217.115.180.240

как и чем нужно обходить этот диапазон и сверять с адресом
с которого пришёл человек....????


Спасибо за внимание.

   
 
 автор: [CHOL]Scorpion   (03.08.2005 в 12:43)   письмо автору
 
   для: method   (03.08.2005 в 04:57)
 

переведи ип в integer и сравнивай.

   
 
 автор: Транк   (03.08.2005 в 12:46)
 
   для: method   (03.08.2005 в 04:57)
 

А можно просо удалять и з ip-адресов точки, и просто сравнивать? Самый лобовой вариант!

Тотже Trunk, только не авторизованный %)

   
 
 автор: [CHOL]Scorpion   (03.08.2005 в 12:52)   письмо автору
 
   для: Транк   (03.08.2005 в 12:46)
 

это как раз не вариант, потому тчо не будет критериев по которым можно выделить диапазон (пресловутые точки)

   
 
 автор: method   (03.08.2005 в 13:13)   письмо автору
 
   для: [CHOL]Scorpion   (03.08.2005 в 12:52)
 

>....
>как и чем нужно обходить этот диапазон и сверять с адресом
>с которого пришёл человек
>....

   
 
 автор: [CHOL]Scorpion   (03.08.2005 в 13:21)   письмо автору
 
   для: method   (03.08.2005 в 13:13)
 

Неужели не понятно, не нужно ничем ничего обходить.
Преобразуешь IP в integer, получается поядковое число.

Смотришь пределы, тоже предварительно переведёные в integer.
Задача сводится к простому сравнению:

if ($ip >= $ip['start'] && $ip<=$ip['stop']){
echo ("Извини мужик, тебе сюда нельзя");
}

ЗЫ, есдинственное что может придётся обходить, это база диапазонов. НО, в самом диапазоне ничего обходить не нужно.

   
 
 автор: cheops   (03.08.2005 в 13:27)   письмо автору
 
   для: method   (03.08.2005 в 04:57)
 

Можно разбить всё при помощи функции explode() и сравнивать каждый из диапазонов
<?php
  
list($ipw1,$ipw2,$ipw3,$ipw4) = explode(".","217.115.160.0");
  list(
$ipq1,$ipq2,$ipq3,$ipq4) = explode(".","217.115.180.240");
  list(
$ip1,$ip2,$ip3,$ip4) = explode(".","217.115.179.72");
  if(
$ipw1<=$ip1 &&
      
$ipw2 <= $ip2 && 
      
$ipw3 <= $ip3 && 
      
$ipw4 <= $ip3 &&
      
$ipq1 >= $ip1 &&
      
$ipq2 >= $ip2 &&
      
$ipq3 >= $ip3 &&
      
$ipq4 >= $ip4) echo "Бан";
?>

   
 
 автор: [CHOL]Scorpion   (03.08.2005 в 13:34)   письмо автору
 
   для: cheops   (03.08.2005 в 13:27)
 

function 2int($ip) {
      $a=explode(".",$ip);
      return $a[0]*256*256*256+$a[1]*256*256+$a[2]*256+$a[3];
}

$ip = начало диапазона;
$ip['start'] = 2int($ip);

$ip = конец диапазона;
$ip['stop'] = 2int($ip);

$ip = $REMOTE_ADDR;
$ip['actual'] = 2int($ip);

if ($ip['actual'] >= $ip['start'] && $ip['actual'] <= $ip['stop']){
    echo ("Мужик, есть место в Перу ... Вот не пойти ли тебе туда?!");
}

   
 
 автор: method   (03.08.2005 в 14:55)   письмо автору
 
   для: [CHOL]Scorpion   (03.08.2005 в 13:34)
 

Спасибо Господа!!

>...
>Неужели не понятно, не нужно ничем ничего обходить
>...

Да не понятно!
Если я не знал на какой казе к этому диапазону
подъехать - мне преобразование строки в интегер
ну не о чём ни говорило...
вот такой вот я неУч.....

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования