Автор Тема: пролема с IP  (Прочитано 3212 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ramazian

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
пролема с IP
« : 15 Января 2003, 18:35:15 »
Как настроить этот PHP TAG, что бы он определял IP ADDRESS?
Что означает: HTTP_X_FORWARDED_FOR и REMOTE_ADDR
Спосибо.

########################################################
if (getenv(\'HTTP_X_FORWARDED_FOR\'))
{
$ip=getenv(\'HTTP_X_FORWARDED_FOR\');
}
{
$ip=getenv(\'REMOTE_ADDR\');
}
?>
########################################################

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
пролема с IP
« Ответ #1 : 15 Января 2003, 19:17:10 »
if (isset($HTTP_X_FORWARDED_FOR)) $ip=$HTTP_X_FORWARDED_FOR;
else $ip=$REMOTE_ADDR;

это если register_globals=on
TANSTAAFL

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
пролема с IP
« Ответ #2 : 15 Января 2003, 20:12:31 »
$HTTP_X_FORWARDED_FOR - иногда имеет значение  undefined.
поэтому его еще нужно проверят на правильный формат, типа

if (isset($HTTP_X_FORWARDED_FOR) &&
preg_match("#^\\\\d{1,3}\\\\.\\\\d{1.3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}$#"$HTTP_X_FORWARDED_FOR)) $ip $HTTP_X_FORWARDED_FOR;

код не проверял, идея думаю ясна
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
пролема с IP
« Ответ #3 : 15 Января 2003, 22:08:19 »
Ещё плюс ко всему в $HTTP_X_FORWARDER_FOR может быть не один ip адрес, а несколько, зависит от того сколько проксей было пройдено.
Вобщем вот моя функция, пользуйтесь на здоровье:
function get_ips() {
    
$result[\'IP\']=GetEnv(\'HTTP_CLIENT_IP\');
    $result[\'PROXY\']=GetEnv(\'HTTP_X_FORWARDED_FOR\');

    if ($result[\'PROXY\']) {
        $tmp=explode(",", str_replace(" ", "", $result[\'PROXY\']));
        $result[\'IP\']=$tmp[sizeof($tmp)-1];
        if(!preg_match("/^[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}$/", $result[\'IP\']))
            $result[\'IP\']="";
        $result[\'PROXY\']=$_SERVER[\'REMOTE_ADDR\'];
    }
    elseif (!$result[\'IP\'])
        $result[\'IP\']=$_SERVER[\'REMOTE_ADDR\'];

    return $result;
}

Функция возвращает массив, состоящий из двух элементов:
IP - ip адрес пользователя, если пусто значит было unknown.
PROXY - адрес последнего пройденого прокси сервера.
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн nagash

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 341
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.nagash.org
пролема с IP
« Ответ #4 : 15 Января 2003, 23:00:38 »
а можно чтобы выводились все пройденые прокси?

Оффлайн nagash

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 341
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.nagash.org
пролема с IP
« Ответ #5 : 15 Января 2003, 23:01:13 »
ну я имею ввиду
result[proxy][0]...[10]

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
пролема с IP
« Ответ #6 : 16 Января 2003, 16:32:33 »
Цитировать
а можно чтобы выводились все пройденые прокси?

Можно, они хранятся в $HTTP_X_FORWARDED_FOR, думаю распарсить сам сможешь.
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн nagash

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 341
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.nagash.org
пролема с IP
« Ответ #7 : 16 Января 2003, 20:30:52 »
ааааааа крута...
пасиба!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28