Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.26.176] |
|
Сообщ.
#1
,
|
|
|
Чт-то понять не могу... есть окружение $_SERVER или $_ENV.
Оттуда можно извлечь HTTP_CLIENT_IP, REMOTE_ADDR и т.п. устанавливает их сервер, как я понимаю. А откуда он берет эти значения? Не могу найти в RFC по HTTP таких полей запроса... |
Сообщ.
#2
,
|
|
|
На сколько я знаю $_SERVER устанавливает сервер. В этом массиве мы находим всё (ну почти всё), что сервер может определить по подключению. Ведь серверу "легко" определить АйПи клиента. Он разбирает строку запроса браузера и получает всякие там REQUEST_URI, REDIRECT_URL etc. Также многие переменные берутся из конфига сервака.
|
Сообщ.
#3
,
|
|
|
Еще раз: Откуда сервер берет HTTP_CLIENT_IP, REMOTE_ADDR и т.п.? Кто-нибудь знает? Из полей HTTP-запроса? или еще откуда?
IP ближайшего хоста, видимо берется из пакета TCP/IP... сокеты и всё-такое А вот как получается IP того, кто за проксей? |
Сообщ.
#4
,
|
|
|
На сколько я помню идёт обращение к Проксе (использование прокси определяется заголовками) на получение реального АйПи клиента и Прокси (не анонимный) честно и откровенно говорит АйПи клиента. Не все прокси поддерживают эту ф-цию.
|
Сообщ.
#5
,
|
|
|
Цитата Rom@nych @ 28.07.04, 16:22 На сколько я помню идёт обращение к Проксе (использование прокси определяется заголовками) на получение реального АйПи клиента и Прокси (не анонимный) честно и откровенно говорит АйПи клиента. Не все прокси поддерживают эту ф-цию. Как выглядит это обращение, хотя бы примерно? И что это за загадочная фраза "использование прокси определяется заголовками"? |
Сообщ.
#6
,
|
|
|
При использовании прокси отправляется заголовок, что идёт обращение через прокси. Узнавание АйПи идёт по отдельному протоколу. название которого я не помню:(
|
Сообщ.
#7
,
|
|
|
Цитата Rom@nych @ 28.07.04, 16:36 При использовании прокси отправляется заголовок, что идёт обращение через прокси. Узнавание АйПи идёт по отдельному протоколу. название которого я не помню:( А что это за заголовок? |
Сообщ.
#8
,
|
|
|
HTTP сервер берет эти стандартные переменные из разных мест. Например IP адрес он узнает когда к нему коннектяться, а REFER_URL из HTTP заголовка и т.д. То, что коннектяться через прокси тоже передаеться в http заголовке, то-есть если прокси не захочет сообщать что он прокси то стандартный www сервер об этом никак не узнает.
Добавлено в : Цитата А что это за заголовок? Ну по сути это запрос браузера, при обращении к серверу он ему шлёт что-то типа: GET /something.html HTTP/1.1 метод, путь к файлу, версия протокола Host: somehost.com хост, к которому обращаються Referer: http://last.site.com/blabla.bla/ откуда приперся чел User-agent: kakayanit mozilla че за браузер дергает ну и так далее, если соединение идет через прокси то некоторые (честные) из них добавляют поля (не помню как называються) что они прокси, реальный IP клиента итд, а сам IP браузером в запросе не передаеться извини если непонятно описал, спать хочу |
Сообщ.
#9
,
|
|
|
Ба-алин!!!
Да я в курсе формата протокола HTTP! Есть такая переменная CGI HTTP_CLIENT_IP? А HTTP_X_FORWARDED_FOR? Это стандарт CGI? Какой версии? не нашел я в этом стандарте таких имен... В стандарте HTTP есть только Proxy-Authenticate и Proxy-Authorization со словом proxy. Никаких вам forwarded_for... Покажите мне пальцем, в каком документе описаны эти загадочные имена HTTP_CLIENT_IP, HTTP_VIA... и прочее, перечислять не буду, кто знает, поймет. |
Сообщ.
#10
,
|
|
|
Сейчас слабал эхо сервак побыстрому и запросил сам себя браузером через палевную
проксю, в результате в запросе проксёй добавилось 2 загаловка: Via: 1.0 ms1.ymes.ylc.edu.tw:3128 (Squid/2.1 PATCH2) <- тут он чё то про себя пишет X-Forwarded-For: xxx.xxx.xxx.xxx <- моя реальная айпя Добавлено в : Via вроде как есть в спецификации протокола HTTP, а X-Forwarded-For действительно нет |
Сообщ.
#11
,
|
|
|
Заголовок Via есть в одном из RFC, но например X-forwarded-for нет в стандардах
|
Сообщ.
#12
,
|
|
|
HTTP_CLIENT_IP по ходу дела - тоже самодеятельность?
|
Сообщ.
#13
,
|
|
|
Он "элементарно" определяется серваком по информации об удалённом подключении клиента к серваку. Обычное свойство соединения, от куда можно узнать АйПи клиента и его порт, с которого идёт коннект.
|
Сообщ.
#14
,
|
|
|
Цитата Rom@nych @ 29.07.04, 10:59 Он "элементарно" определяется серваком по информации об удалённом подключении клиента к серваку. Обычное свойство соединения, от куда можно узнать АйПи клиента и его порт, с которого идёт коннект. Позволю себе не согласиться... Для того IP, который определяется "элементарно", есть REMOTE_ADDR в соответствии со спецификацией CGI. Подозреваю, что HTTP_CLIENT_IP передается проксей, как реальный IP реального клиента. Допустим чел коннектится через несколько проксей... Каждой проксе нужно передавать свой IP (REMOTE_ADDR), IP предыдущей прокси (X_FORWARDED_FOR) ну и по логике вещей IP самого клиента где-то надо передать. Вот она - логика B) Но чтобы быть уверенным, нужно подтверждение фактами (негде взять), или документацией (не могу найти) |
Сообщ.
#15
,
|
|
|
2Rom@nych:
Цитата Он "элементарно" определяется серваком по информации об удалённом подключении клиента к серваку. Обычное свойство соединения, от куда можно узнать АйПи клиента и его порт, с которого идёт коннект. Нет, rvt прав, адрес который определяеться серваком когда к нему коннектяться, то-еть последнего прокси это REMOTE_ADDR, а HTTP_CLIENT_IP - это не то 2rvt: Цитата Подозреваю, что HTTP_CLIENT_IP передается проксей, как реальный IP реального клиента. Допустим чел коннектится через несколько проксей... Каждой проксе нужно передавать свой IP (REMOTE_ADDR), IP предыдущей прокси (X_FORWARDED_FOR) ну и по логике вещей IP самого клиента где-то надо передать. Скорее всего так оно и есть, скинь мне проксю которая передает HTTP_CLIENT_IP кроме HTTP_X_FORWARDED_FOR и я посмотрю что появляеться в заголовоках, мне просто тоже надо стало Хотя я уже уверен, что это поле в заголовке называеться Client-IP: |
Сообщ.
#16
,
|
|
|
А в том-то и фишка я не проверял, кто что возвращает. HTTP_CLIENT_IP я нашел в PHP Manual и видел в разных исходниках проверки IP. Причем, что интересно, у всех функции ловят разные поля и по-разному. Видимо, какие-то из этих функций не работают Поэтому я написал еще одну ловлю CLIENT_IP, потом FORWARDED_FOR, потом REMOTE_ADDR через elseif. Надеюсь будет работать, аллелуйя! B)
Если будет время, я покопаюсь в проксях... сейчас нет возможности |