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

Статус
В этой теме нельзя размещать новые ответы.

a_n_d_y

Гуру форума
Регистрация
26 Мар 2006
Сообщения
470
Реакции
62
Есть у меня такая функция для определения айпи пользователей. Эти айпи потом складываю в базу.
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 раза? Может такое просиходит когда во время незакрытой сессии пользователь начал использовать прокси? В какой момент вызывается эта функция, в момент логирования?
 
Да, это начало второго айпишника, просто содержимое заголовков 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]; 
    }
 
Как я понимаю это начало второго айпишника. Может ли быть ситуация, когда функция вызывается 2 раза? Может такое просиходит когда во время незакрытой сессии пользователь начал использовать прокси? В какой момент вызывается эта функция, в момент логирования?
Эти варианты невозможны по определению.

Добавлено через 1 минуту
Да, это начало второго айпишника, просто содержимое заголовков 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]; 
    }
Про этот код я и сам сначала говорил. Но от куда берется второй айпи?
 
Если пользователь заходит через серию прокси, то они перечисляются в $ENV{'HTTP_VIA'} через запятую и в $ENV{'HTTP_X_FORWARDED_FOR'} записывается серия IP.
 
А если комп в локальной сети предприятия, как его однозначно идентифицировать по айпи, то есть получить и реальное айпи и локальное айпи?
 
А если комп в локальной сети предприятия, как его однозначно идентифицировать по айпи, то есть получить и реальное айпи и локальное айпи?
А о чем тебе внутренний айпи сети скажет? Они ведь легко могут иметь вид 192.168.ххх.ххх

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

А о чем тебе внутренний айпи сети скажет? Они ведь легко могут иметь вид 192.168.ххх.ххх
Кстати появился, неожиданно второй вопрос.
А все айпи в цепочке в каком именно порядке строятся?
 
А о чем тебе внутренний айпи сети скажет? Они ведь легко могут иметь вид 192.168.ххх.ххх
Я же написал, для однозначный идентификации пользователя по айпи. Хочу получить от юзера, если он в локальный сети, что то типа ххх.ххх.ххх.ххх:192.168.ххх.ххх
 
Я же написал, для однозначный идентификации пользователя по айпи. Хочу получить от юзера, если он в локальный сети, что то типа ххх.ххх.ххх.ххх:192.168.ххх.ххх
Это и мне очень интересно, но вряд ли реально...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху