#1 2009.12.27 03:12

WebGraf
Участник
Зарегистрирован: 2009.07.21
Сообщений: 134
Карма: 1
Профиль

Правильное определение IP-адреса

$_SERVER['HTTP_X_FORWARDED_FOR'] использую для определения реального IP-адреса, при условии что USER_AGENT Опера Мини.
И вот что получается - временами в переменной X_FORWARDED_FOR передаются айпи в таком виде:
123.123.123.123,
или
123.123.123.123.

И вот что нужно чтобы определить верный айпи без ., Но следует учесть что может и что-то другое еще может быть в этих значениях. Эти два примера, это то что мне попало только.

Вот мой вариант решения задачи:
если ЮА опера мини

Код:

1
2
$ips = split("\.", $_SERVER['HTTP_X_FORWARDED_FOR']);
$ip = $ips[0].'.'.$ips[1].'.'.$ips[2].'.'.$ips[3];

Может у кого есть другие предположения на этот счет?
Добавлено спустя   2 минуты  56 секунд:
Сам себя поправлю.
Думаю лучше будет заменить split() на explode()

Отредактировано WebGraf (2009.12.27 03:16)

Неактивен

#2 2009.12.27 12:33

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Правильное определение IP-адреса

да, конечно. split - это регулярка из состава ereg, следовательно deprecated.
На сколько я помню, там еще дальше могут быть IP, после запятой, если используются прокси и сервеам оперы передается X-FORWARDED-FOR. А вообщке, вполне нормальное решение разбивка по explode, ИМХО.

Неактивен

#3 2009.12.27 13:30

WebGraf
Участник
Зарегистрирован: 2009.07.21
Сообщений: 134
Карма: 1
Профиль

Re: Правильное определение IP-адреса

Ну значит пусть так и будет

Код:

1
2
$ips = explode('.', $_SERVER['HTTP_X_FORWARDED_FOR']);
$ip = $ips[0].'.'.$ips[1].'.'.$ips[2].'.'.$ips[3];

Неактивен

#4 2009.12.27 16:09

Swinger
Участник
Зарегистрирован: 2009.09.09
Сообщений: 28
Карма: 1
Профиль

Re: Правильное определение IP-адреса

X_FORWARDED_FOR  легко подменить, юзай remote_addr

Неактивен

#5 2009.12.27 16:22

WebGraf
Участник
Зарегистрирован: 2009.07.21
Сообщений: 134
Карма: 1
Профиль

Re: Правильное определение IP-адреса

Читай выше когда я его использую
Для остальных случаев remote_addr

Неактивен

#6 2009.12.27 20:31

WebGraf
Участник
Зарегистрирован: 2009.07.21
Сообщений: 134
Карма: 1
Профиль

Re: Правильное определение IP-адреса

Кажется я сам себя обманываю
188.115.194.1,12.12.
код выше разобьет на 5 частей. ну допустим что я использую 4 из них для построения айпи
последняя (4) часть будет 1,12
думаю стоит о интвал подумать

Отредактировано WebGraf (2009.12.27 20:48)

Неактивен

#7 2009.12.27 23:20

Gemor
Гость

Re: Правильное определение IP-адреса

ну да, либо еще sprintf

Код:

1
2
3
$_SERVER['HTTP_X_FORWARDED_FOR'] = '188.115.194.1,12.12.';
$ips = explode('.', $_SERVER['HTTP_X_FORWARDED_FOR']);
echo $ips[0] . '.' . $ips[1] . '.' . $ips[2] . '.' . sprintf('%s', $ips[3]);

#8 2009.12.28 01:23

AND
Участник
Зарегистрирован: 2009.01.23
Сообщений: 87
Карма: 11
Профиль Веб-сайт

Re: Правильное определение IP-адреса

Gemor ошибся, в sprintf нужен спецификатор типа  %d (%u)
Можно еще так:

Код:

1
2
preg_match('/^[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}/', $_SERVER['HTTP_X_FORWARDED_FOR'], $ip);
echo $ip[0];

Неактивен

#9 2009.12.28 10:37

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Re: Правильное определение IP-адреса

preg_match('/^[0-255]\.[0-255]\.[0-255]\.[0-255]/', $_SERVER['HTTP_X_FORWARDED_FOR'], $ip);
echo $ip[0];
А так правильно будет? smile


на хую вас вертів

Неактивен

#10 2009.12.28 11:02

WebGraf
Участник
Зарегистрирован: 2009.07.21
Сообщений: 134
Карма: 1
Профиль

Re: Правильное определение IP-адреса

И всетаки вариант с интвал самый быстрый.
Вариант с sprintf('%d', $ips[3]) также хорош
А вот preg_match - это перебор. К чему эта излишняя нагрузка?
Добавлено спустя   6 минут  35 секунд:
Ну и сразу по теме еще 1 вопрос.
Какой сервер использовать лучше всего для проверки айпи.
На данный момент использую whois.lacnic.net

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.014 s