За последние 24 часа нас посетили 15794 программиста и 1541 робот. Сейчас ищут 759 программистов ...

Как узнать реальный IP пользователя

Тема в разделе "Прочие вопросы по PHP", создана пользователем $oft, 5 апр 2009.

  1. $oft

    $oft Активный пользователь

    С нами с:
    11 окт 2008
    Сообщения:
    113
    Симпатии:
    0
    Адрес:
    Орел
    Пробовал множество скриптов результат - множество ошибок.

    подскажите простой способ узнать реальный айпи пользователя. :idea:
     
  2. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    $oft
    абсолютно 100% метода не существует
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Узнать можно только IP-адрес хоста, запросившего документ.
     
  4. kostyl

    kostyl Guest

    $oft
    Прийти к нему домой
     
  5. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    попросить его ввести свой реальный ip не кривя душой :)
     
  6. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    PHP:
    1. <?php
    2. /**
    3.  * Get user ip
    4.  *
    5.  * @return string
    6.  */
    7. function getIp()
    8. {
    9.     static $ip = null;
    10.  
    11.     if ($ip === null) {
    12.         if (isset($_SERVER)) {
    13.             if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && isValidIp($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    14.                 $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    15.             } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && isValidIp($_SERVER['HTTP_CLIENT_IP'])) {
    16.                 $ip = $_SERVER['HTTP_CLIENT_IP'];
    17.             } else {
    18.                 $ip = $_SERVER['REMOTE_ADDR'];
    19.             }
    20.         } else {
    21.             if (getenv('HTTP_X_FORWARDED_FOR') && isValidIp(getenv('HTTP_X_FORWARDED_FOR'))) {
    22.                 $ip = getenv('HTTP_X_FORWARDED_FOR');
    23.             } elseif (getenv('HTTP_CLIENT_IP') && isValidIp(getenv('HTTP_CLIENT_IP'))) {
    24.                 $ip = getenv('HTTP_CLIENT_IP');
    25.             } else {
    26.                 $ip = getenv('REMOTE_ADDR');
    27.             }
    28.         }
    29.     }
    30.     return $ip;
    31. }
    32.  
    33. /**
    34.  * Checks if IP is valid public internet ip
    35.  *
    36.  * @param string $ip
    37.  * @return bool
    38.  */
    39. function isValidIp($ip) {
    40.     if (!empty($ip) && $ip == long2ip(ip2long($ip))) {
    41.         // reserved IANA IPv4 addresses
    42.         // [url=http://www.iana.org/assignments/ipv4-address-space]http://www.iana.org/assignments/ipv4-address-space[/url]
    43.         $reserved = array (
    44.                             array('0.0.0.0', '2.255.255.255'),
    45.                             array('10.0.0.0', '10.255.255.255'),
    46.                             array('127.0.0.0', '127.255.255.255'),
    47.                             array('169.254.0.0', '169.254.255.255'),
    48.                             array('172.16.0.0', '172.31.255.255'),
    49.                             array('192.0.2.0', '192.0.2.255'),
    50.                             array('192.168.0.0', '192.168.255.255'),
    51.                             array('255.255.255.0', '255.255.255.255')
    52.         );
    53.         foreach ($reserved as $r) {
    54.             $min = ip2long($r[0]);
    55.             $max = ip2long($r[1]);
    56.             if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
    57.         }
    58.         return true;
    59.     } else {
    60.         return false;
    61.     }
    62. }
     
  7. $oft

    $oft Активный пользователь

    С нами с:
    11 окт 2008
    Сообщения:
    113
    Симпатии:
    0
    Адрес:
    Орел
    Psih
    Допустим я поверил в функцию function getIp()...

    но на счет function isValidIp($ip) меня терзают смутные сомнения... да и вообще как ей пользоваться, если 1я функция ничего не дала...
     
  8. $oft

    $oft Активный пользователь

    С нами с:
    11 окт 2008
    Сообщения:
    113
    Симпатии:
    0
    Адрес:
    Орел
    а может кто еще более надежный способ знает идентификации пользователей системой

    ( что то вроде uniqid(""); ... или еще более надежно: uniqid( getIp(), FALSE); )
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А чем ун икальный ключ надежен? Он разве не каждый раз уникален?
     
  10. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    требуй предъявить пасспорт
     
  11. Windows Live Accounting
     
  12. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    $oft
    getIp использует isValidIp блин, неужели вы так слепы? о.О

    и смотрите коммент в isValidIp и перестанте сомневаться.
     
  13. $oft

    $oft Активный пользователь

    С нами с:
    11 окт 2008
    Сообщения:
    113
    Симпатии:
    0
    Адрес:
    Орел
    да он каждый раз уникален, именно поэтому второго такого уже не будет. следовательно можно оценить присутствие определенного пользователя в системе сравнив этот ключ в куках или еще где с тем что записан в бд
     
  14. $oft

    $oft Активный пользователь

    С нами с:
    11 окт 2008
    Сообщения:
    113
    Симпатии:
    0
    Адрес:
    Орел
    ip: 127.0.0.1 эм... это по ходу не совсем мой айпи... правда я на локальном хосте это делаю.

    это нормально или косяк какой то?
     
  15. shurastik

    shurastik Активный пользователь

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
    нормально
     
  16. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    это твой локальный IP
     
  17. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    не тот что в локалке, а тот что на компе ))
     
  18. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Это IP локального соеденения. Для каждого отдельного соеденения может быть настроен свой IP-адрес, таким образом компьютер может иметь несколько IP-адресов.
    Минус этих заголовков в том, что у разных пользователей они могут содержать одинаковые IP-адреса.
    Наиболее достоверно можно определять пользователя по IP-адресу+кука+браузер.
     
  19. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    [vs]
    Ну заголовок топика "Как узнать реальный IP пользователя", а то что автору реально надо другое - его проблемы - пусть редактирует заголовок :)