|
|
|
Все статьи: 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, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106
|
Определение IP пользователя.
artuska 19.02.2007 - 12:47 Здрасти!
Вообщем, вопрос про то, как определить ИП пользователя, зашедшего на сайт. Есть довольно популярный скрипт, который это "успешно" делает:
PHP function get_user_ip() { $strRemoteIP = $_SERVER['REMOTE_ADDR']; if (getenv('HTTP_X_FORWARDED_FOR')) { $strIP = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_X_FORWARDED')) { $strIP = getenv('HTTP_X_FORWARDED'); } elseif (getenv('HTTP_FORWARDED_FOR')) { $strIP = getenv('HTTP_FORWARDED_FOR'); } elseif (getenv('HTTP_FORWARDED')) { $strIP = getenv('HTTP_FORWARDED'); } else { $strIP = $_SERVER['REMOTE_ADDR']; } if ($strRemoteIP != $strIP) { $strIP = $strRemoteIP.", ".$strIP; } return $strIP; }
На форумах приводят этот код и тема про выяснение ИП пользователя закрывается.
НО ЛЮДИ! Но ведь не определяет этот код РЕАЛЬНЫЙ ИП пользователя. У меня по Латвии один ИП, а на загранку - через прокси - другой ИП. Так вот переменные типа $_SERVER['REMOTE_ADDR'] и другие (а другие вообще ничего не возвращают, гы) определяют тока ип последного прокси сервера, через который я выхожу в интернет!!!
Заходил я на сайты, которые реально определяли мой ИП адрес. Как они это делают? Или вот играю в комбатс.ру - там они тож определяют мой реальный ип и ип, передаваемый через прокси.
Подскажите, как узнать реальный ип!!!
vasa_c 19.02.2007 - 12:57 Единственное, что можно точно знать на сервере, это IP последнего узла с которым обмениваемся пакетами. Соответственно, в случае с прокси, это будет прокси. Прокси может посылать IP конечного пользователя в http-заголовках. Вот проверка HTTP_X_FORWARDED_FOR и других и есть попытка вытащить его. Однако, прокси абсолютно не обязан посылать эти заголовки, да и в случае отсылки, может написать туда все чего ему вздумается.
cage 19.02.2007 - 13:11 кто тебе сказал,что комбатс определяет твой настоящий ай-пи...ничего подобного,играю через прокси и нихрена они не видят!так что бк не в пример,пусть лучше со своими сессиями разберутся
artuska 19.02.2007 - 13:25 to cage:
оффтоп - какой у тебя ник, если не секрет? насчет определения реального ип - возьми и открой инфу какого-нить перса, а теперь, жми долго-долго CTRL+R, чтоб обновить страницу и тебе поставят временный бан на именно твой реальный ип!!! По крайней мере, когда я смотрю перед боем инфу перса и часто ее обновляю, чтоб быстренько отозвать заявку на бой если тот начинает хамелеонить, то меня банят и 15минут я не могу просматривать ничью инфу, гы...
cage 19.02.2007 - 13:32 прокси гамно и то,что тебя банят это не означает,что они знают твой реальный ай-пи,просто банят ай-пи,через который ты заходишь А ник мой...а ник мой слишком известен,чтобы его произносить вслух))))))
artuska 19.02.2007 - 13:46 Они банят и пишут мой реальный ИП, а через черточку - ип прокси сервера!!! Мой реальный ип пишут, ты думаешь я его не знаю? Мой_ип=то,_что_там_они_написали!!!
Кароче, не это важно. А-то тема перерастает в обсуждение комбатса)
PHPLion 23.02.2007 - 03:41 Реально скрыть ай-пи не возможно... Даже если использовать цепочку прокси с сокс 4,5
Nikitian 13.07.2009 - 22:14 А я такой код использую, подсмотренный в пыхмайадмине:
function get_ip() { global $REMOTE_ADDR; global $HTTP_X_FORWARDED_FOR, $HTTP_X_FORWARDED, $HTTP_FORWARDED_FOR, $HTTP_FORWARDED; global $HTTP_VIA, $HTTP_X_COMING_FROM, $HTTP_COMING_FROM; global $HTTP_SERVER_VARS, $HTTP_ENV_VARS;
if(empty($REMOTE_ADDR)) { if(!empty($_SERVER)&&isset($_SERVER['REMOTE_ADDR'])) { $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; } elseif(!empty($_ENV)&&isset($_ENV['REMOTE_ADDR'])) { $REMOTE_ADDR = $_ENV['REMOTE_ADDR']; } elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['REMOTE_ADDR'])) { $REMOTE_ADDR = $HTTP_SERVER_VARS['REMOTE_ADDR']; } elseif(!empty($HTTP_ENV_VARS)&&isset($HTTP_ENV_VARS['REMOTE_ADDR'])) { $REMOTE_ADDR = $HTTP_ENV_VARS['REMOTE_ADDR']; } elseif(@getenv('REMOTE_ADDR')) { $REMOTE_ADDR = getenv('REMOTE_ADDR'); } } if(empty($HTTP_X_FORWARDED_FOR)) { if(!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif(!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED_FOR'])) { $HTTP_X_FORWARDED_FOR = $_ENV['HTTP_X_FORWARDED_FOR']; } elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'])) { $HTTP_X_FORWARDED_FOR = $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR']; } elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_FORWARDED_FOR'])) { $HTTP_X_FORWARDED_FOR = $HTTP_ENV_VARS['HTTP_X_FORWARDED_FOR']; } elseif(@getenv('HTTP_X_FORWARDED_FOR')) { $HTTP_X_FORWARDED_FOR = getenv('HTTP_X_FORWARDED_FOR'); } } if(empty($HTTP_X_FORWARDED)) { if(!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED'])) { $HTTP_X_FORWARDED = $_SERVER['HTTP_X_FORWARDED']; } elseif(!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED'])) { $HTTP_X_FORWARDED = $_ENV['HTTP_X_FORWARDED']; } elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED'])) { $HTTP_X_FORWARDED = $HTTP_SERVER_VARS['HTTP_X_FORWARDED']; } elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_FORWARDED'])) { $HTTP_X_FORWARDED = $HTTP_ENV_VARS['HTTP_X_FORWARDED']; } elseif(@getenv('HTTP_X_FORWARDED')) { $HTTP_X_FORWARDED = getenv('HTTP_X_FORWARDED'); } } if(empty($HTTP_FORWARDED_FOR)) { if(!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED_FOR'])) { $HTTP_FORWARDED_FOR = $_SERVER['HTTP_FORWARDED_FOR']; } elseif(!empty($_ENV) && isset($_ENV['HTTP_FORWARDED_FOR'])) { $HTTP_FORWARDED_FOR = $_ENV['HTTP_FORWARDED_FOR']; } elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_FORWARDED_FOR'])) { $HTTP_FORWARDED_FOR = $HTTP_SERVER_VARS['HTTP_FORWARDED_FOR']; } elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_FORWARDED_FOR'])) { $HTTP_FORWARDED_FOR = $HTTP_ENV_VARS['HTTP_FORWARDED_FOR']; } elseif(@getenv('HTTP_FORWARDED_FOR')) { $HTTP_FORWARDED_FOR = getenv('HTTP_FORWARDED_FOR'); } } if(empty($HTTP_FORWARDED)) { if(!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED'])) { $HTTP_FORWARDED = $_SERVER['HTTP_FORWARDED']; } elseif(!empty($_ENV) && isset($_ENV['HTTP_FORWARDED'])) { $HTTP_FORWARDED = $_ENV['HTTP_FORWARDED']; } elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_FORWARDED'])) { $HTTP_FORWARDED = $HTTP_SERVER_VARS['HTTP_FORWARDED']; } elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_FORWARDED'])) { $HTTP_FORWARDED = $HTTP_ENV_VARS['HTTP_FORWARDED']; } elseif(@getenv('HTTP_FORWARDED')) { $HTTP_FORWARDED = getenv('HTTP_FORWARDED'); } } if(empty($HTTP_VIA)) { if(!empty($_SERVER) && isset($_SERVER['HTTP_VIA'])) { $HTTP_VIA = $_SERVER['HTTP_VIA']; } elseif(!empty($_ENV) && isset($_ENV['HTTP_VIA'])) { $HTTP_VIA = $_ENV['HTTP_VIA']; } elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_VIA'])) { $HTTP_VIA = $HTTP_SERVER_VARS['HTTP_VIA']; } elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_VIA'])) { $HTTP_VIA = $HTTP_ENV_VARS['HTTP_VIA']; } elseif(@getenv('HTTP_VIA')) { $HTTP_VIA = getenv('HTTP_VIA'); } } if(empty($HTTP_X_COMING_FROM)) { if(!empty($_SERVER) && isset($_SERVER['HTTP_X_COMING_FROM'])) { $HTTP_X_COMING_FROM = $_SERVER['HTTP_X_COMING_FROM']; } elseif(!empty($_ENV) && isset($_ENV['HTTP_X_COMING_FROM'])) { $HTTP_X_COMING_FROM = $_ENV['HTTP_X_COMING_FROM']; } elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_COMING_FROM'])) { $HTTP_X_COMING_FROM = $HTTP_SERVER_VARS['HTTP_X_COMING_FROM']; } elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_COMING_FROM'])) { $HTTP_X_COMING_FROM = $HTTP_ENV_VARS['HTTP_X_COMING_FROM']; } elseif(@getenv('HTTP_X_COMING_FROM')) { $HTTP_X_COMING_FROM = getenv('HTTP_X_COMING_FROM'); } } if(empty($HTTP_COMING_FROM)) { if(!empty($_SERVER) && isset($_SERVER['HTTP_COMING_FROM'])) { $HTTP_COMING_FROM = $_SERVER['HTTP_COMING_FROM']; } elseif(!empty($_ENV) && isset($_ENV['HTTP_COMING_FROM'])) { $HTTP_COMING_FROM = $_ENV['HTTP_COMING_FROM']; } elseif(!empty($HTTP_COMING_FROM) && isset($HTTP_SERVER_VARS['HTTP_COMING_FROM'])) { $HTTP_COMING_FROM = $HTTP_SERVER_VARS['HTTP_COMING_FROM']; } elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_COMING_FROM'])) { $HTTP_COMING_FROM = $HTTP_ENV_VARS['HTTP_COMING_FROM']; } elseif(@getenv('HTTP_COMING_FROM')) { $HTTP_COMING_FROM = getenv('HTTP_COMING_FROM'); } } if(!empty($REMOTE_ADDR)) { $direct_ip = $REMOTE_ADDR; }
$proxy_ip=''; if(!empty($HTTP_X_FORWARDED_FOR))$proxy_ip = $HTTP_X_FORWARDED_FOR; elseif(!empty($HTTP_X_FORWARDED))$proxy_ip = $HTTP_X_FORWARDED; elseif(!empty($HTTP_FORWARDED_FOR))$proxy_ip = $HTTP_FORWARDED_FOR; elseif(!empty($HTTP_FORWARDED))$proxy_ip = $HTTP_FORWARDED; elseif(!empty($HTTP_VIA))$proxy_ip = $HTTP_VIA; elseif(!empty($HTTP_X_COMING_FROM))$proxy_ip = $HTTP_X_COMING_FROM; elseif(!empty($HTTP_COMING_FROM))$proxy_ip = $HTTP_COMING_FROM;
if (empty($proxy_ip)) { return $direct_ip; } else { $is_ip = ereg('^([0-9]{1,3}\.){3,3}[0-9]{1,3}', $proxy_ip, $regs); if($is_ip && (count($regs) > 0)) { return $regs[0]; } else { return FALSE; } } } Вроде верно всегда определяет, а так просто лень разбираться в нём, т.к. и так устраивает )
|
|
|
|
|
|
|