Может кто-нибудь подсказать, реально ли через Php`овый скрипт определить серый Ip пользователя, сидяшего через Nat? $_server["remote_addr"] и $_server["http_x_forwarded_for"] Несколько не то...
Да, другим словом, через скрипты\аплеты , выполняющиеся на стороне пользователя...(java, flash и т.д)
Попробуй так: if (isSet($_SERVER)) { if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) { $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) { $realip = $_SERVER["HTTP_CLIENT_IP"]; } else { $realip = $_SERVER["REMOTE_ADDR"]; } } else { if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) { $realip = getenv( 'HTTP_X_FORWARDED_FOR' ); } elseif ( getenv( 'HTTP_CLIENT_IP' ) ) { $realip = getenv( 'HTTP_CLIENT_IP' ); } else { $realip = getenv( 'REMOTE_ADDR' ); } } $user_reg_id = $realip; $user_reg_host = gethostbyaddr($realip);
Pashkela, не, не помогло... Моя тут озадачился... Вот идет пакет от узверя, через маршрутизатор. Маршрутизатор его натит на серв. Серв отвечает, маршрутизатору приходит ответ. У маршрутизатора 254 клиента. Которому слать? А он ведь знает... Значит где-то в хедерах оно есть. Притом не в пакете, иначе серв-бы клал-бы на это содержимое, а именно в заголовках. Просто по логике его не может не быть, иначе обратный нат получается невозможным. Следовательно ежели он есть, его можно выцепить. Я слабо знаком с php и не уверен, могет ли он енто делать, но по логике должен. Но в любом случае, на серве это выцепить можно, и не обязательны скрипты, запускающиеся на стороне пользователя. Кстати джава под никсами будет безполезна, потомучто смертный пользователь, от которого запущен браузер просто не сможет посмотреть ip. Тупо не хватит прав... Гугления чет мне особо ничего не дали =( но моя продолжает упорно ковырять, ибо скрипт нужен... Можно и Пентагон взломать, тут дело в другом. Есть много деревянных пользователей, за которыми нужен учет...
Гм... странно эти переменные вообще не определились... php возвращает false... ====== Мож конечно я че накосячил, повторюсь, с php работаю недавно... PHP: <?php $ip1 = $_SERVER['HTTP_CLIENT_IP']; $ip2 = $_SERVER['HTTP_X_REAL_IP']; if (!$ip1) echo 'f1'; else echo "$ip1"; if (!$ip2) echo 'f2'; else echo "$ip2"; ?> Вот енто выводит 'f1f2'...
КЛиент открывает порт, подает запрос, сервер отвечает, клиент закрывает порт. Пока соединение не закрыто, клиент может спокойно принимать любые данные. Code: GET /cgi-bin/params.pl HTTP/1.1 Host: old.antichat.ru Accept: */* Accept-Encoding: gzip Connection: keep-alive HTTP/1.x 200 OK Date: Sat, 22 Mar 2008 15:45:38 GMT Server: Power MOD by web4host.net Keep-Alive: timeout=15, max=297 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=windows-1251 Content-Language: ru Как видишь в HTTP заголовке никаких данных о клиенте нету.
Лан, с натом я более-менее разобрался, с серверной стороны енто не выцепить, или по крайней мере это вне моего разумения. Тогда возникает вопрос, сталкивался ктонить с подобными задачами, но если уже использовать скрипты на стороне пользователя? Javascript, или аплеты? или мож еще чегонить, с чем я не знаком? или мож хотя-бы есть ссылки на адекватные статьи?
Неправильное понимание принципов маршрутизации, серый адрес хранится где-то в памяти роутера, связаный с соединением с твоим сервером. Из вне его никак не узнать. Пробуем так(javascript): HTML: window . onerror = null; hostaddress = hostname = "(unknown)"; localhost = java . net . InetAddress . getLocalHost (); hostaddress = localhost . getHostAddress (); hostname = localhost . getHostName (); А дальше асинхронный запрос к твоему сервером с оповещением серого адреса.