На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > И снова про IP... , Как задаются переменные окружения?
      Чт-то понять не могу... есть окружение $_SERVER или $_ENV.

      Оттуда можно извлечь HTTP_CLIENT_IP, REMOTE_ADDR и т.п. устанавливает их сервер, как я понимаю. А откуда он берет эти значения? Не могу найти в RFC по HTTP таких полей запроса...
        На сколько я знаю $_SERVER устанавливает сервер. В этом массиве мы находим всё (ну почти всё), что сервер может определить по подключению. Ведь серверу "легко" определить АйПи клиента. Он разбирает строку запроса браузера и получает всякие там REQUEST_URI, REDIRECT_URL etc. Также многие переменные берутся из конфига сервака.
          Еще раз: Откуда сервер берет HTTP_CLIENT_IP, REMOTE_ADDR и т.п.? Кто-нибудь знает? Из полей HTTP-запроса? или еще откуда?

          IP ближайшего хоста, видимо берется из пакета TCP/IP... сокеты и всё-такое :)

          А вот как получается IP того, кто за проксей?
            На сколько я помню идёт обращение к Проксе (использование прокси определяется заголовками) на получение реального АйПи клиента и Прокси (не анонимный) честно и откровенно говорит АйПи клиента. Не все прокси поддерживают эту ф-цию.
              Цитата Rom@nych @ 28.07.04, 16:22
              На сколько я помню идёт обращение к Проксе (использование прокси определяется заголовками) на получение реального АйПи клиента и Прокси (не анонимный) честно и откровенно говорит АйПи клиента. Не все прокси поддерживают эту ф-цию.

              Как выглядит это обращение, хотя бы примерно? :angry: И что это за загадочная фраза "использование прокси определяется заголовками"?
                При использовании прокси отправляется заголовок, что идёт обращение через прокси. Узнавание АйПи идёт по отдельному протоколу. название которого я не помню:(
                  Цитата Rom@nych @ 28.07.04, 16:36
                  При использовании прокси отправляется заголовок, что идёт обращение через прокси. Узнавание АйПи идёт по отдельному протоколу. название которого я не помню:(

                  А что это за заголовок?
                    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 браузером в запросе не передаеться

                    извини если непонятно описал, спать хочу
                      Ба-алин!!! :wacko:

                      Да я в курсе формата протокола HTTP!

                      Есть такая переменная CGI HTTP_CLIENT_IP? А HTTP_X_FORWARDED_FOR? Это стандарт CGI? Какой версии? не нашел я в этом стандарте таких имен... В стандарте HTTP есть только Proxy-Authenticate и Proxy-Authorization со словом proxy. Никаких вам forwarded_for... Покажите мне пальцем, в каком документе описаны эти загадочные имена HTTP_CLIENT_IP, HTTP_VIA... и прочее, перечислять не буду, кто знает, поймет.
                        Сейчас слабал эхо сервак побыстрому и запросил сам себя браузером через палевную
                        проксю, в результате в запросе проксёй добавилось 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 действительно нет
                          Заголовок Via есть в одном из RFC, но например X-forwarded-for нет в стандардах
                            HTTP_CLIENT_IP по ходу дела - тоже самодеятельность?
                              Он "элементарно" определяется серваком по информации об удалённом подключении клиента к серваку. Обычное свойство соединения, от куда можно узнать АйПи клиента и его порт, с которого идёт коннект.
                                Цитата Rom@nych @ 29.07.04, 10:59
                                Он "элементарно" определяется серваком по информации об удалённом подключении клиента к серваку. Обычное свойство соединения, от куда можно узнать АйПи клиента и его порт, с которого идёт коннект.

                                Позволю себе не согласиться...

                                Для того IP, который определяется "элементарно", есть REMOTE_ADDR в соответствии со спецификацией CGI.

                                Подозреваю, что HTTP_CLIENT_IP передается проксей, как реальный IP реального клиента. Допустим чел коннектится через несколько проксей... Каждой проксе нужно передавать свой IP (REMOTE_ADDR), IP предыдущей прокси (X_FORWARDED_FOR) ну и по логике вещей IP самого клиента где-то надо передать.


                                Вот она - логика B)

                                Но чтобы быть уверенным, нужно подтверждение фактами (негде взять), или документацией (не могу найти)
                                  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: :)
                                  Сообщение отредактировано: Michail04 -
                                    А в том-то и фишка :) я не проверял, кто что возвращает. HTTP_CLIENT_IP я нашел в PHP Manual и видел в разных исходниках проверки IP. Причем, что интересно, у всех функции ловят разные поля и по-разному. Видимо, какие-то из этих функций не работают :D Поэтому я написал еще одну :D :D ловлю CLIENT_IP, потом FORWARDED_FOR, потом REMOTE_ADDR через elseif. Надеюсь будет работать, аллелуйя! B)

                                    Если будет время, я покопаюсь в проксях... сейчас нет возможности <_<
                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                    0 пользователей:


                                    Рейтинг@Mail.ru
                                    [ Script execution time: 0,0373 ]   [ 15 queries used ]   [ Generated: 28.04.24, 16:36 GMT ]