Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокировка по IP 
V
    Опции темы
larios
Дата 23.10.2007, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



Подскажите как можно организовать пересылку на другой адрес по IP-адресу, если мне надо переадресовать только определенную группу IP, например: "192.12.*.*".
Код

$ip=getenv("REMOTE_ADDR");
if ($ip=="80.254.1.1") {header("Location:http://www.mail.ru");}
if ($ip=="80.254.1.2") {header("Location:http://www.mail.ru");}
 и т.д.
Так писать, не есть хорошо.
Есть какие-то решенния этой проблемы.
Для меня это пока тяжело. Маловато знаний.

Это сообщение отредактировал(а) larios - 23.10.2007, 20:39
PM MAIL WWW   Вверх
Glip
Дата 23.10.2007, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



перевести ip в int, сделать & с опятьже переведёной в int маской 255.255.0.0
и сравнить с переведёным же в int 192.12.0.0

это так с ходу.



--------------------
user posted image
PM MAIL   Вверх
webevt
Дата 23.10.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



Ээээ...

Код

if ( preg_match ( "/80\\.254\\.\d+\\.\d+/", $ip ) ) header ( "Location:http://www.mail.ru" );

Так?

Это сообщение отредактировал(а) webevt - 23.10.2007, 21:07
PM MAIL   Вверх
PARROT
Дата 23.10.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



.htaccess
Код

Order allow,deny
Allow from all
Deny from 85.249.41.120



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
flashaa
Дата 24.10.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Цитата(Glip @  23.10.2007,  20:47 Найти цитируемый пост)
перевести ip в int, сделать & с опятьже переведёной в int маской 255.255.0.0
и сравнить с переведёным же в int 192.12.0.0

Меня порадовала идея.

Но имхо самое простое решение: 
Код

if (strpost($ip, '192.12.' ) === 0) {

    // Айпи начинается с 192.12.....

}



Это сообщение отредактировал(а) flashaa - 24.10.2007, 10:47
PM MAIL   Вверх
клоп
Дата 24.10.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 28.2.2006
Где: г. Череповец

Репутация: нет
Всего: нет



Как вариант можно наверное так сделать, если группа IP не велика:

Код

if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP");
        else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR");
        else $ip = "unknown";
$data_array=@file(".htaip");
$check_ip = FALSE;
$sum=count($data_array);
for($i=0;$i<$sum;$i++)
        {
            $parse_data=explode("|",$data_array[$i]);
            $data_array[$i]=$parse_data[0];
            if($data_array[$i] === $ip){
            $check_ip = TRUE; break;
            }
        }
if($check_ip !== TRUE) {header("location: http://www-link/index.html"); exit;}


Структура .htaip

IP|описание 
IP|описание 

Все кто не прописан в .htaip перейдут на http://www-link/index.html
--------------------
Всякая чепуха посещает голову, когда она пуста ....
PM MAIL WWW   Вверх
Pokoinik
Дата 24.10.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 17.3.2007
Где: /dev/null

Репутация: 2
Всего: 3



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


--------------------
ICQ: 490-993
Существует только 10 типов людей: те, которые понимают двоичную систему, и которые ее не понимают!!!
Опасайтесь людей верующих, ибо у них есть боги, которые им все прощают.

Делай или не делай! Никаких попробую!
Йода (Yoda), мастер-джедай
PM MAIL ICQ   Вверх
Glip
Дата 24.10.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



работа с ip в виде a.b.c.d проста до тех пор пока у вас маски кратные 8 битам /8 /16 /24 (255.0.0.0, 255.255.0.0, 255.255.255.0)
если надо будет например с маской 12 - 172.16.0.0 - 172.31.255.254 то решения в виде a.b.c.d будут несколько сложнее.

Цитата(flashaa @  24.10.2007,  10:46 Найти цитируемый пост)
Но имхо самое простое решение: 

да ваше проще, моё немного универсальнее

Это сообщение отредактировал(а) Glip - 24.10.2007, 12:35


--------------------
user posted image
PM MAIL   Вверх
larios
Дата 24.10.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



Код

<?
$ip=getenv("REMOTE_ADDR");
for ($a=1;$a<=254;$a++)
{
    for ($i=1;$i<=254;$i++)
    {
        if ($ip=="80.254.".$a.".".$i) 
        {
                header("Location:http://www.mail.ru");
        }
    }
}
?>

Так наверное громоздко, но я пока не дошел до Вашего уровня.
Есть ли здесь глобальные ошибки?

Это сообщение отредактировал(а) larios - 24.10.2007, 20:25
PM MAIL WWW   Вверх
Glip
Дата 24.10.2007, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



адреса 80.254.0.* 80.254.255.* не будут редиректится

ну и для адреса 80.254.254.254 будет работать дольше чем все вышеприведёные примеры

Это сообщение отредактировал(а) Glip - 24.10.2007, 22:50


--------------------
user posted image
PM MAIL   Вверх
sTa1kEr
Дата 24.10.2007, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Вариант Glip не только универсальный, но и наиболее правильный с точки зрения стиля и более быстрый по производительности. 

larios, пример
Код

$ip = ip2long(getenv("REMOTE_ADDR"));
$mask = ip2long("255.255.0.0");
$sub = ip2long("192.12.0.0");

if ($ip & $mask == $sub) 
{
   header("Location:http://www.mail.ru");
}


PM MAIL   Вверх
larios
Дата 25.10.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



sTa1kEr, 
Код

$ip = ip2long(getenv("REMOTE_ADDR"));
$mask = ip2long("255.255.0.0");
$sub = ip2long("192.12.0.0");

if ($ip & $mask == $sub) 
{
   header("Location:http://www.mail.ru");
}


Код почему то не работает.
PM MAIL WWW   Вверх
sTa1kEr
Дата 25.10.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



larios, оператор == имеет большеий пероритет... Не подумав написал, правильно будет так
Код

$ip = ip2long(getenv("REMOTE_ADDR"));
$mask = ip2long("255.255.0.0");
$sub = ip2long("192.12.0.0");
if (($ip & $mask) == $sub) 
{
   header("Location:http://www.mail.ru");
}

PM MAIL   Вверх
larios
Дата 25.10.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



Спасибо большое.
Все отлично работает.
Какие же вы все головастые, аж завидки берут.

Это сообщение отредактировал(а) larios - 25.10.2007, 16:36
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.