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

Форум PHP

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

 

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

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

тема: Фильтр по IP-адресу!
 
 автор: NeO   (10.07.2006 в 15:51)   письмо автору
 
 

Понадобилось сделать фильтр по ip на моём компе, чтобы доступ имели только пользователи этого провайдера (чтоб мне не шёл внешний трафик).
Подскажите как это сделать в php.. и чтоб не писать каждый ip отдельно (их 6 тыщ), а просто указать диапазоны..
Заранее спасибо

   
 
 автор: Unkind™   (10.07.2006 в 16:00)   письмо автору
 
   для: NeO   (10.07.2006 в 15:51)
 

А чем эти IP похожи? Можно, к примеру так:

<?
$provider 
"123.123.123"//Первые три числа IP адреса. Допустим в этом схожесть.
$ip getenv('REMOTE_ADDR'); //123.123.123.000

if(substr_count($ip$provider) == 0)
{
die(
"ПАШШШОЛ отсюда.");

else
{
echo 
"Welcome!"//В данном случае выведет это.
}
?>

   
 
 автор: NeO   (10.07.2006 в 17:24)   письмо автору
 
   для: Unkind™   (10.07.2006 в 16:00)
 

ip такие -
97.146.48.0 – 97.146.55.255

тоесть этот метод не совсем подходит...
еще надо указать несколько таких диапазонов...

   
 
 автор: Football   (10.07.2006 в 18:28)   письмо автору
 
   для: NeO   (10.07.2006 в 17:24)
 

1) Находим ИП
2) На части делим его и сравниваем с начальным и конечным
3) Повторяем столько раз, сколько у нас таким промежутков

   
 
 автор: Football   (10.07.2006 в 18:57)   письмо автору
 
   для: Football   (10.07.2006 в 18:28)
 

Вот, написал, вроде работает:


<? 

$ip
="100.100.100.350";  // IP адресс
$ip_masiv_nachalo=array("100.100.100.100","100.100.100.230"); // Диапазоны начал
$ip_masiv_conec=array("100.100.100.200","100.100.100.300"); // Диапазоны конец

$count_masiv=count($ip_masiv_nachalo); // ну кол-во собственно

$dostup=true// в начале доступ открыт

for ($i=0;$i<$count_masiv;$i++) { // ну а далее понеслась проверка
    
    
$ip_nachalo=explode(".",$ip_masiv_nachalo[$i]);
    
$ip_conec=explode(".",$ip_masiv_conec[$i]);
    
$ip_adress=explode(".",$ip);
    
    if (
$ip_adress[0]<$ip_conec[0] and $ip_adress[0]>$ip_nachalo[0]) {
    
$dostup=false;
    }
    
    if (
$dostup && $ip_adress[1]<$ip_conec[1] and $ip_adress[1]>$ip_nachalo[1]) {
    
$dostup=false;
    }
    
    if (
$dostup && $ip_adress[2]<$ip_conec[2] and $ip_adress[2]>$ip_nachalo[2]) {
    
$dostup=false;
    }  
    
    if (
$dostup && $ip_adress[3]<$ip_conec[3] and $ip_adress[3]>$ip_nachalo[3]) {
    
$dostup=false;
    }

}

if (!
$dostup) {
echo 
"Пошёл отсюда";
}

?>

   
 
 автор: NeO   (10.07.2006 в 20:14)   письмо автору
 
   для: Football   (10.07.2006 в 18:57)
 

у вы не работает :(

   
 
 автор: Football   (10.07.2006 в 20:26)   письмо автору
 
   для: NeO   (10.07.2006 в 20:14)
 

На локалке все работало. А что именно не работает? Что пишет?

   
 
 автор: NeO   (10.07.2006 в 21:44)   письмо автору
 
   для: Football   (10.07.2006 в 20:26)
 

пускает с ip, который пускать не должно.... попробуй поставить ip не 100, а более нормальные.. если будет работать, то выложи еще раз плиз

   
 
 автор: Football   (11.07.2006 в 10:17)   письмо автору
 
   для: NeO   (10.07.2006 в 21:44)
 

Лучше приведи пример, с ккоторым пускает, а я уж под него проверять буду

   
 
 автор: NeO   (11.07.2006 в 16:37)   письмо автору
 
   для: Football   (11.07.2006 в 10:17)
 

Вот.. Пишет что доступ запрещён...
диапазоны ip:
85.158.48.0 – 85.158.55.255
80.255.176.0 – 80.255.191.255

<? 

$ip
="80.255.178.***";  // IP адресс 
$ip_masiv_nachalo=array("85.158.48.0","80.255.176.0"); // Диапазоны начал 
$ip_masiv_conec=array("85.158.55.255","80.255.191.255"); // Диапазоны конец 

$count_masiv=count($ip_masiv_nachalo); // ну кол-во собственно 

$dostup=true// в начале доступ открыт 



for ($i=0;$i<$count_masiv;$i++) { // ну а далее понеслась проверка 
     
    
$ip_nachalo=explode(".",$ip_masiv_nachalo[$i]); 
    
$ip_conec=explode(".",$ip_masiv_conec[$i]); 
    
$ip_adress=explode(".",$ip); 
     
    if (
$ip_adress[0]<$ip_conec[0] and $ip_adress[0]>$ip_nachalo[0]) { 
    
$dostup=false
    } 
     
    if (
$dostup && $ip_adress[1]<$ip_conec[1] and $ip_adress[1]>$ip_nachalo[1]) { 
    
$dostup=false
    } 
     
    if (
$dostup && $ip_adress[2]<$ip_conec[2] and $ip_adress[2]>$ip_nachalo[2]) { 
    
$dostup=false
    }   
     
    if (
$dostup && $ip_adress[3]<$ip_conec[3] and $ip_adress[3]>$ip_nachalo[3]) { 
    
$dostup=false
    } 




if (!
$dostup) { 
echo 
"Пошёл отсюда"


?>

   
 
 автор: Football   (11.07.2006 в 16:57)   письмо автору
 
   для: NeO   (11.07.2006 в 16:37)
 

Понял в чем ошибка.
Вам видимо нужен был скрипт, который пускает, если IP входит в диапазон. А мой скрипт наоборот, запрещает, если IP в этот диапазон входит. В принципе, это очень похожие задачи, так что изменить скрипт надеюсь вам не соствит труда...

   
 
 автор: NeO   (14.07.2006 в 19:39)   письмо автору
 
   для: Football   (11.07.2006 в 16:57)
 

и как же его переделать? =)

   
 
 автор: Loki   (10.07.2006 в 19:38)   письмо автору
 
   для: NeO   (10.07.2006 в 15:51)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=5965&page=1
http://softtime.ru/forum/read.php?id_forum=1&id_theme=18722&page=1

   
 
 автор: Shorr Kan   (10.07.2006 в 21:06)   письмо автору
 
   для: Loki   (10.07.2006 в 19:38)
 

.

   
Rambler's Top100
вверх

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