Вы не зашли.
Главная » PHP » Правильное определение IP-адреса
#1. WebGraf Off (1)
Участник
2009.12.27 03:03
$_SERVER['HTTP_X_FORWARDED_FOR'] использую для определения реального IP-адреса, при условии что USER_AGENT Опера Мини.
И вот что получается - временами в переменной X_FORWARDED_FOR передаются айпи в таком виде:
123.123.123.123,
или
123.123.123.123.

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

Вот мой вариант решения задачи:
если ЮА опера мини
Код:
$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:03)
#2. Gemorroj Off (107)
Administrator
2009.12.27 12:12
да, конечно. split - это регулярка из состава ereg, следовательно deprecated.
На сколько я помню, там еще дальше могут быть IP, после запятой, если используются прокси и сервеам оперы передается X-FORWARDED-FOR. А вообщке, вполне нормальное решение разбивка по explode, ИМХО.
#3. WebGraf Off (1)
Участник
2009.12.27 13:01
Ну значит пусть так и будет
Код:
$ips = explode('.', $_SERVER['HTTP_X_FORWARDED_FOR']);
$ip = $ips[0].'.'.$ips[1].'.'.$ips[2].'.'.$ips[3];
#4. Swinger Off (1)
Участник
2009.12.27 16:04
X_FORWARDED_FOR  легко подменить, юзай remote_addr
#5. WebGraf Off (1)
Участник
2009.12.27 16:04
Читай выше когда я его использую
Для остальных случаев remote_addr
#6. WebGraf Off (1)
Участник
2009.12.27 20:08
Кажется я сам себя обманываю
188.115.194.1,12.12.
код выше разобьет на 5 частей. ну допустим что я использую 4 из них для построения айпи
последняя (4) часть будет 1,12
думаю стоит о интвал подумать
Отредактировано WebGraf (2009.12.27 20:08)
#7. Gemor
Гость
2009.12.27 23:11
ну да, либо еще sprintf
Код:
$_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. AND Off (11)
Участник
2009.12.28 01:01
Gemor ошибся, в sprintf нужен спецификатор типа  %d (%u)
Можно еще так:
Код:
preg_match('/^[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}/', $_SERVER['HTTP_X_FORWARDED_FOR'], $ip);
echo $ip[0];
#9. Fuelen Off (5)
Участник
2009.12.28 10:10
preg_match('/^[0-255]\.[0-255]\.[0-255]\.[0-255]/', $_SERVER['HTTP_X_FORWARDED_FOR'], $ip);
echo $ip[0];
А так правильно будет? smile
на хую вас вертів
#10. WebGraf Off (1)
Участник
2009.12.28 11:11
И всетаки вариант с интвал самый быстрый.
Вариант с sprintf('%d', $ips[3]) также хорош
А вот preg_match - это перебор. К чему эта излишняя нагрузка?
Добавлено спустя   6 минут  35 секунд:
Ну и сразу по теме еще 1 вопрос.
Какой сервер использовать лучше всего для проверки айпи.
На данный момент использую whois.lacnic.net
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.018 s