Странная вещь при определении айпи

Тема в разделе "PHP", создана пользователем a_n_d_y, 18 дек 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Есть у меня такая функция для определения айпи пользователей. Эти айпи потом складываю в базу.
    PHP:
        function getIP() {
          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" );
            }
          }
          return 
    $realip;
        }
    Вроде в 99% случаев все хорошо, но иногда в базу замечаю айпи такого вида.
    Код:
    83.149.3.29, 94
    10.15.145.75, 8
    
    В общем 15 символов ибо тип столбца в таблице varchar(15). Подскажите почему так получается? Просто интересно даже. Это че у некоторых двойной айпи? Как это исправить понятно, можно на выходе регуляркой все как надо обрезать...
     
  2. Arnor

    Arnor Создатель

    Регистр.:
    5 фев 2009
    Сообщения:
    36
    Симпатии:
    12
    Как я понимаю это начало второго айпишника. Может ли быть ситуация, когда функция вызывается 2 раза? Может такое просиходит когда во время незакрытой сессии пользователь начал использовать прокси? В какой момент вызывается эта функция, в момент логирования?
     
  3. potehi

    potehi Создатель

    Регистр.:
    9 авг 2008
    Сообщения:
    32
    Симпатии:
    22
    Да, это начало второго айпишника, просто содержимое заголовков X-Forwarded-For не стандартизировано и может быть разное, чтоб таког о не возникало необходимо добавить немного кода:

    PHP:
        function getIP() { 
          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" ); 
            } 
          }

          
    $realip explode(","$realip);
          return 
    $realip[0]; 
        } 
     
    a_n_d_y нравится это.
  4. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Эти варианты невозможны по определению.

    Добавлено через 1 минуту
    Про этот код я и сам сначала говорил. Но от куда берется второй айпи?
     
  5. Arnor

    Arnor Создатель

    Регистр.:
    5 фев 2009
    Сообщения:
    36
    Симпатии:
    12
    Если пользователь заходит через серию прокси, то они перечисляются в $ENV{'HTTP_VIA'} через запятую и в $ENV{'HTTP_X_FORWARDED_FOR'} записывается серия IP.
     
  6. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    А если комп в локальной сети предприятия, как его однозначно идентифицировать по айпи, то есть получить и реальное айпи и локальное айпи?
     
  7. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    А о чем тебе внутренний айпи сети скажет? Они ведь легко могут иметь вид 192.168.ххх.ххх

    ---------- Post added at 23:51 ---------- Previous post was at 22:45 ----------

    Кстати появился, неожиданно второй вопрос.
    А все айпи в цепочке в каком именно порядке строятся?
     
  8. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Я же написал, для однозначный идентификации пользователя по айпи. Хочу получить от юзера, если он в локальный сети, что то типа ххх.ххх.ххх.ххх:192.168.ххх.ххх
     
  9. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Это и мне очень интересно, но вряд ли реально...
     
  10. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    www.2ip.ru/whois/ же получает локальный айпи, значить реально, может/скорее всего средствами js
     
Статус темы:
Закрыта.