Svarga
Moderator | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору А на каком языке? Perl: Цитата: $ip=$ENV{HTTP_X_FORWARDED_FOR}||$ENV{REMOTE_ADDR}||'cmd'; $proxy=($ENV{HTTP_X_FORWARDED_FOR} || $ENV{HTTP_VIA} || $ENV{HTTP_PROXY_CONNECTION}) ? "$ENV{REMOTE_ADDR}|$ENV{HTTP_X_FORWARDED_FOR}|$ENV{HTTP_VIA}|$ENV{HTTP_PROXY_CONNECTION}":0; | что-то типа того ($proxy — чтоб если прокси не передаёт HTTP_X_FORWARDED_FOR, но передаёт что-то ещё можно было понять, что это прокси), 'cmd' — на всяк случай, если надо фиксировать запуск скрипта в командной строке ... Кстати, близкая тема есть... Сейчас... Добавлено Вот: алгоритм определения уникального посетителя Добавлено вот ещё: $HTTP_X_COMING_FROM, $HTTP_FORWARDED http://www.cgsa.net/php/identifierShow.php а вообще, где-то встречал довольно большой список переменных окружения, которые передаются разными типами прокси-серверов... Добавлено $ENV{CLIENT_IP} $ENV{HTTP_CLIENT_IP} $ENV{HTTP_X_COMING_FROM} $ENV{HTTP_FROM} HTTP_SP_HOST HTTP_X_LOCKING HTTP_CACHE_INFO HTTP_CACHE_CONTROL HTTP_PROXY_AUTHORIZATION HTTP_XROXY_CONNECTION HTTP_X_LOOKING HTTP_XONNECTION и т. п. Вот нечто злобное на PHP подвернулось: Цитата: function get_real_IP() { global $HTTP_VIA , $HTTP_X_COMING_FROM , $HTTP_CLIENT_IP , $HTTP_X_FORWARDED_FOR , $HTTP_X_FORWARDED , $HTTP_COMING_FROM , $HTTP_FORWARDED_FOR , $HTTP_FORWARDED , $REMOTE_HOST , $REMOTE_ADDR ; if($HTTP_X_FORWARDED_FOR) { // case 1.A: proxy && HTTP_X_FORWARDED_FOR is defined $array = extractIP($HTTP_X_FORWARDED_FOR); if ($array && count($array) >= 1) { return $array[0]; // first IP in the list } } if($HTTP_X_FORWARDED) { // case 1.B: proxy && HTTP_X_FORWARDED is defined $array = extractIP($HTTP_X_FORWARDED); if ($array && count($array) >= 1) { return $array[0]; // first IP in the list } } if($HTTP_FORWARDED_FOR) { // case 1.C: proxy && HTTP_FORWARDED_FOR is defined $array = extractIP($HTTP_FORWARDED_FOR); if ($array && count($array) >= 1) { return $array[0]; // first IP in the list } } if($HTTP_FORWARDED) { // case 1.D: proxy && HTTP_FORWARDED is defined $array = extractIP($HTTP_FORWARDED); if ($array && count($array) >= 1) { return $array[0]; // first IP in the list } } if($HTTP_CLIENT_IP) { // case 1.E: proxy && HTTP_CLIENT_IP is defined $array = extractIP($HTTP_CLIENT_IP); if ($array && count($array) >= 1) { return $array[0]; // first IP in the list } } /* if($HTTP_VIA) { // case 2: // proxy && HTTP_(X_) FORWARDED (_FOR) not defined && HTTP_VIA defined // other exotic variables may be defined return ( $HTTP_VIA . '_' . $HTTP_X_COMING_FROM . '_' . $HTTP_COMING_FROM ) ; } if( $HTTP_X_COMING_FROM || $HTTP_COMING_FROM ) { // case 3: proxy && only exotic variables defined // the exotic variables are not enough, we add the REMOTE_ADDR of the proxy return ( $REMOTE_ADDR . '_' . $HTTP_X_COMING_FROM . '_' . $HTTP_COMING_FROM ) ; } */ // case 4: no proxy (or tricky case: proxy+refresh) if($REMOTE_HOST) { $array = extractIP($REMOTE_HOST); if ($array && count($array) >= 1) { return $array[0]; // first IP in the list } } return $REMOTE_ADDR; } |
|