Странный ip адрес

 
0
 
PHP
ava
Elfer | 07.09.2016, 14:36
Впервые столкнулся с такой проблемой, что ip заказчика возвращается в странном виде: 2001:7d0:838f:f780:d4c5:776d:9929:c5e3
Возвращаю через $_SERVER["REMOTE_ADDR"]. Очень сильно удивился, что такой нестандартный ip и вывел всё содержимое $_SERVER:

Array
(
    [HOSTNAME] => sn9.zone.eu
    [SHELL] => /bin/bash
    [PATH] => /opt/zone/sbin:/opt/zone/bin:/bin:/usr/bin:/sbin:/usr/sbin
    [TZ] => Europe/Tallinn
    [_] => /bin/nice
    [PHP_FCGI_MAX_REQUESTS] => 0
    [PHPRC] => /data01/virt39546/domeenid/www.styleup.clothing/phpini/styleup.clothing
    [PHP_INI_SCAN_DIR] => /data01/virt39546/domeenid/www.styleup.clothing/phpini/global
    [SCRIPT_NAME] => /index.php
    [REQUEST_URI] => /site/myIp
    [QUERY_STRING] => 
    [REQUEST_METHOD] => GET
    [SERVER_PROTOCOL] => HTTP/1.1
    [GATEWAY_INTERFACE] => CGI/1.1
    [REDIRECT_URL] => /site/myIp
    [REMOTE_PORT] => 50621
    [SCRIPT_FILENAME] => /data01/virt39546/domeenid/www.styleup.clothing/htdocs/index.php
    [SERVER_ADMIN] => [email protected]
    [CONTEXT_DOCUMENT_ROOT] => /data01/virt39546/domeenid/www.styleup.clothing/htdocs/
    [CONTEXT_PREFIX] => 
    [REQUEST_SCHEME] => http
    [DOCUMENT_ROOT] => /data01/virt39546/domeenid/www.styleup.clothing/htdocs/
    [REMOTE_ADDR] => 2001:7d0:838f:f780:d4c5:776d:9929:c5e3
    [SERVER_PORT] => 80
    [SERVER_ADDR] => 2a02:29e8:770:0:3::19
    [SERVER_NAME] => styleup.clothing
    [SERVER_SOFTWARE] => Apache / ZoneOS
    [SERVER_SIGNATURE] => Apache / ZoneOS Server at styleup.clothing Port 80


    [HTTP_COOKIE] => Drupal.toolbar.collapsed=0; _ga=GA1.2.1134957638.1470048367; jv_visits_count_LGheI6Pj5E=1; PHPSESSID=3d08fcdafc5e7714a70d2da14c18fda8
    [HTTP_CONNECTION] => Keep-Alive
    [HTTP_HOST] => styleup.clothing
    [HTTP_ACCEPT_ENCODING] => gzip, deflate
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
    [HTTP_ACCEPT_LANGUAGE] => et-EE
    [HTTP_ACCEPT] => text/html, application/xhtml+xml, /
    [DZSP_IS_ESTONIAN_IP] => 1
    [SCRIPT_URI] => http://styleup.clothing/site/myIp
    [SCRIPT_URL] => /site/myIp
    [DZSP_PHP_FASTCGI_MODULE] => mod_zfpm
    [DZSP_MYSQL_HOST] => d39365.mysql.zonevs.eu
    [DZSP_PHP_MODE] => fastcgi
    [DZSP_CP_URL] => https://data.zone.ee/admin.php
    [DZSP_PMA_URL] => https://pma.zone.ee/
    [DZSP_VENDOR_URL] => https://www.zone.ee/
    [DZSP_VERSION] => 2
    [MM_COUNTRY_CODE] => EE
    [MMDB_INFO] => result found
    [MMDB_ADDR] => 2001:7d0:838f:f780:d4c5:776d:9929:c5e3
    [UNIQUE_ID] => [email protected]
    [REDIRECT_STATUS] => 200
    [REDIRECT_DZSP_IS_ESTONIAN_IP] => 1
    [REDIRECT_SCRIPT_URI] => http://styleup.clothing/site/myIp
    [REDIRECT_SCRIPT_URL] => /site/myIp
    [REDIRECT_DZSP_PHP_FASTCGI_MODULE] => mod_zfpm
    [REDIRECT_DZSP_MYSQL_HOST] => d39365.mysql.zonevs.eu
    [REDIRECT_DZSP_PHP_MODE] => fastcgi
    [REDIRECT_DZSP_CP_URL] => https://data.zone.ee/admin.php
    [REDIRECT_DZSP_PMA_URL] => https://pma.zone.ee/
    [REDIRECT_DZSP_VENDOR_URL] => https://www.zone.ee/
    [REDIRECT_DZSP_VERSION] => 2
    [REDIRECT_MM_COUNTRY_CODE] => EE
    [REDIRECT_MMDB_INFO] => result found
    [REDIRECT_MMDB_ADDR] => 2001:7d0:838f:f780:d4c5:776d:9929:c5e3
    [REDIRECT_UNIQUE_ID] => [email protected]
    [FCGI_ROLE] => RESPONDER
    [PHP_SELF] => /index.php
    [REQUEST_TIME_FLOAT] => 1473160699.86
    [REQUEST_TIME] => 1473160699
    [argv] => Array
        (
        )

    [argc] => 0
)

Очень удивился и попросил заказчика открыть 2ip.ru сайт дабы посмотреть что там покажет. Показало: 90.190.172.98
Полез в интернет искать объяснения увиденному, нашёл только то, что ip желательно определять по такому алгоритму:

function ip() {
    if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
        $ip = $client;
    elseif (filter_var( @$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
        $ip = $forward;
    else $ip = $_SERVER['REMOTE_ADDR'];
    return $ip;
}

Взял его себе на вооружение, но с моей проблемой этот код не поможет.
Подскажите, плиз, как быть с такими странными ip "2001:7d0:838f:f780:d4c5:776d:9929:c5e3", как их привести к нормальному виду?
Ответы (11)
ava
a0730 | 07.09.2016, 15:48 #
Отключи IPv6.
ava
Elfer | 08.09.2016, 11:44 #
Как отключить IPv6? Я же не скажу каждому юзеру отключить IPv6.
Задача в том, чтобы по ip определять из какой страны пользователь. База ip есть, функционал тоже есть, задача в том, чтобы эти ip, с которых заходят пользователи были стандартные: числа и точки. База с ip адресами и странами тоже содержим стандартные ip. Т.е. я не могу ip вида 2001:7d0:838f:f780:d4c5:776d:9929:c5e3 сравнивать с ip в этой базе. Мне нужно эти странные ip приводить к нормальному виду. На 2ip.ru возвращается почему-то нормальный ip. Там же как-то делается это PHP-средствами на автомате.
ava
gta4kv | 11.09.2016, 07:46 #
Нельзя привести эти "странные ip" к нормальному виду, потому что это и есть нормальный вид. GeoIP давно поддерживает IPv6, в чем проблема?
ava
Elfer | 12.09.2016, 23:20 #
Хорошо, почему тогда 2ip.ru показал привычный нам ip-адрес из цифр и точек? Попробую также поискать в сети базу ip-адресов и стран расширенную, с нестандартными ip. Очень мало информации в интернете по этому поводу, тяжело найти ответ. Вот рассчитываю на ответы гуру.
ava
gta4kv | 16.09.2016, 08:58 #
Еще раз, вам надо убрать из головы понятие про "нестандартные".
Тут все предельно просто, адреса в диапазон 1.1.1.1 - 255.255.255.255 (IPv4) заканчиваются, поэтому повсеместно вводится новый формат (IPv6). И это происходит уже достаточно давно.Информации об этом в интернете настолько много, что читать можно минимум месяц.

А теперь к проблеме:
Полагаю, что для определения географической принадлежности пользователя вы используете базу GeoIP (она, мне кажется, в общем-то одна). Так вот у этой базы давно есть обновленная версия с IPv6. Так что вам надо сделать всего две вещи:

1) Почитать про IPv6 и выкинуть из лексикона понятие про странный/нестандартный IP (Ибо это уже давно стандарт)
2) Обновить базу GeoIP

А насчет почему 2ip отображает обычный адрес, так это потому, что коннект в пространстве IPv6 возможен только тогда, когда и хост и клиент поддерживают его.

ava
_zorn_ | 16.09.2016, 16:26 #
Цитата (gta4kv @  16.9.2016,  15:58 findReferencedText)
 адреса в диапазон 1.1.1.1 - 255.255.255.255 (IPv4) заканчиваются, поэтому повсеместно вводится новый формат (IPv6)

На самом деле 0.0.0.0 - 255.255.255.255. А еще честнее от 00000000 до FFFFFFFF
Всякие броадкасты/юникасты/эникасты просто по договоренности придуманы. На самом деле IP адрес обычное 32 битное и число ваш 1.1.1.1 выглядит так - 0x01010101
Ну не хватило 32 бит на весь мир  :crazy
ava
gta4kv | 16.09.2016, 18:14 #
Точняк. Не знаю откуда вообще придумал 1.1.1.1, даже 1.0.0.0 было бы логичнее  :search 
ava
_zorn_ | 16.09.2016, 18:20 #
Цитата (gta4kv @  17.9.2016,  01:14 findReferencedText)
даже 1.0.0.0 было бы логичнее

Кстати кому принадлежит эта сеть ? Хотел бы себе такую (как раньше аську шестизнак :))
ava
_zorn_ | 16.09.2016, 18:38 #
Вообще я сейчас подумал...
Сначала придумал надуманную проблему что их запоминать тяжелее (попробуй зайти на этот абырвалг с двоеточиями).
Но потом подумал с другой стороны - нам (технарям в том числе) этого не избежать. А основная проблема в старом оборудовании и САМОЕ ГЛАВНОЕ в старых сетевых специалистах.
Одномоментно никто на IPv6 все не переведет.
Но этого не избежать.

Так что ответ ТС - скоро вы будете говорить про "127.0.0.1" - "странный айпи адрес"  :-D 
ava
_zorn_ | 16.09.2016, 18:55 #
Это я представил себя в качестве производителя сетевой железяки :)
ava
Elfer | 18.09.2016, 21:59 #
Спасибо за толкование, надеюсь оно верное и прислушаюсь к этому. Поищу базу под IPv6 адреса.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  gta4kv   _zorn_   a0730   Elfer
advanced
Отправить