Forum Webscript.Ru

Программирование => PHP => Тема начата: CGVictor от 10 Декабря 2004, 20:57:56

Название: Массовое зеблуждение с определением ip
Отправлено: CGVictor от 10 Декабря 2004, 20:57:56

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";

У меня вот такая конструкция вполне работает.
Название: Массовое зеблуждение с определением ip
Отправлено: Vovan_Tverskoy от 10 Декабря 2004, 22:01:05
А у меня нет!
Выдает не мой ip а сервера.
Название: Массовое зеблуждение с определением ip
Отправлено: Vovan_Tverskoy от 10 Декабря 2004, 22:02:46
Хотя на fatal.ru - все работает прекрасно, даже первый вариант!
Может дело в хостере?
Название: Массовое зеблуждение с определением ip
Отправлено: Alexey333 от 11 Декабря 2004, 18:48:16
if (getenv(\'HTTP_X_FORWARDED_FOR\')) {
$ip=getenv(\'HTTP_X_FORWARDED_FOR\');
}
else {
$ip=getenv(\'REMOTE_ADDR\');
}
Название: Массовое зеблуждение с определением ip
Отправлено: Vovan_Tverskoy от 11 Декабря 2004, 18:51:47
Ну, это все равно вернет адрес хостера, а не мой.
Мой находится в HTTP_X_REAL_IP.
Название: Массовое зеблуждение с определением ip
Отправлено: CGVictor от 13 Декабря 2004, 22:23:02
Vovan_Tverskoy
Глюк...
Хотя, если знаешь, где твой IP - получить не проблема, так? :)
Название: Массовое зеблуждение с определением ip
Отправлено: frontera от 14 Декабря 2004, 13:05:55
оппа ребята, как так. дело не в серваке, это данные http заголовков, значит либо сервак работает через проксю (и от имени прокси соответственно идут заголовки) либо у тебя стоит типа прокси (или маскарадинг какой не такой) но маскируется под ip сервера......
попробуй на каком-нить бесплатном хостинге без прокси проверить (кроме h1..10..11 который Агава дает - там сервак как-раз через проксю работает)
или поставь себе Денвера и тестируй на нем, и траффик не жрешь и юзать удобно :-)
Название: Массовое зеблуждение с определением ip
Отправлено: Меняздесьдавнонет от 15 Декабря 2004, 15:29:53
CGVictor , а ты вот прямо такой функцией и пользуешься? Часто?
Название: Массовое зеблуждение с определением ip
Отправлено: Меняздесьдавнонет от 15 Декабря 2004, 15:30:44
как не имеющие никакого отношения к проблемам Толяна, все эти "советы" вынесены в отдельный топик.
Название: Массовое зеблуждение с определением ip
Отправлено: CGVictor от 15 Декабря 2004, 19:40:14
Цитировать
RomikChef:
вынесены в отдельный топик

И почему-то опять с моим ником. Не нравится мне подобная популярность.

Цитировать
RomikChef:
ты вот прямо такой функцией и пользуешься?

[off]Будут бить по шапке...[/off]
Да, бывает.
Название: Массовое зеблуждение с определением ip
Отправлено: Меняздесьдавнонет от 15 Декабря 2004, 20:30:46
бывает - это в каких случаях?
Название: Массовое зеблуждение с определением ip
Отправлено: CGVictor от 16 Декабря 2004, 10:05:45
RomikChef
Ромик, ну не томи, давай сразу, где я опять напортачил...

Цитировать
RomikChef:
в каких случаях

Для определенности говорю "во всех".

[off]Повинную голову меч не сечет...[/off]
Название: Массовое зеблуждение с определением ip
Отправлено: Меняздесьдавнонет от 16 Декабря 2004, 12:28:57
Эта функция наиболее реальными считает те адреса, которые легче всего подделать.
Собственно, к протоколу TCP/IP имеет отношение только переменная REMOTE_ADDR, поскольку содержит адрес хоста, который инициировал TCP/IP сессию.
Остальные же, такие, как HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR - это просто дополнительные текстовые поля в заголовке HTTP запроса.
Не надо, я думаю, объяснять, что НТТР заголовки легко подделываются.
Есть еще одна проблема.
Заключается она в том, что "реальный" IP адрес обычно весьма малоинформативен.
Большинство компьютеров сейчас подключено к интернету через локальные сети с IP адресами из приватных диапазонов - 10., 192., и так далее. Идентифицировать, даже приблизительно, откуда пришел такой запрос, невозможно в принципе.

Это, так сказать, фактическая сторона медали.
Но есть еще и, если можно так выразиться, философская.
Меня всегда удивляло, что в этой жизни люди всегда стремятся выбирать. Обязательно что-то одно. Или грудь в грестах, или голова в кустах. Ну, по законам военного времени такой максимализм понятен.
Но в мирное время - кто нас заставляет выбирать только один фактор?
Почему мы сами себе руки связываем?
Ограничиваем себя только одним параметром?
Или тот, или другой, или третий.
Тем более, в таком важном деле, как точная идентификация клинта.
Если так уж приспичило с аптекарской точностью определить адрес - Почему бы тогда не использовать сразу все? Это будет всяко надежнее, чем один.

Лично я, если бы озаботился таким вопросом, то писал бы ремоте аддр. а все остальные скидывал в поле произвольной формы. поскольку совсем не обязательно, что они будут иметь вид айпи адреса. для форвардед фор это даже в стандарте заложено - там они могут идти через запятую.

Но опять же - это только в случае, если действительно надо кого-то отслеживать. а в обычной жизни я пользуюсь ремоте аддр.
Название: Массовое зеблуждение с определением ip
Отправлено: CGVictor от 16 Декабря 2004, 13:00:15
Цитировать
RomikChef:
а все остальные скидывал в поле произвольной формы

Так как тогда проверять? Если совпал хоть один адрес? Если все вместе, то один ... подделать можно.

[off]
Цитировать
RomikChef:
в обычной жизни я пользуюсь ремоте аддр

Хе.. и я, но исключительно от лени :)

Еще вот нашел на Скилле (http://skill.ru/artwork/1626.shtml) вариант, но у него те же недостатки:

$user_ip = implode (\', \', array_diff(preg_split ("/,\\s*/", (getenv(\'HTTP_X_FORWARDED_FOR\') ? getenv(\'HTTP_X_FORWARDED_FOR\').\', \' : \'\').(getenv(\'HTTP_CLIENT_IP\') ? getenv(\'HTTP_CLIENT_IP\') : getenv(\'REMOTE_ADDR\'))), array(\'unknown\')));

А слеши форум скушал.. Refer to original.[/off]