Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Странный ip адрес


Автор: Elfer 7.9.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] => apache-admins@zone.ee
    [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] => V86l@9mSRQkAADXDNYwAAACq
    [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] => V86l@9mSRQkAADXDNYwAAACq
    [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", как их привести к нормальному виду?

Автор: a0730 7.9.2016, 15:48
Отключи IPv6.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Stranny-ip-adres-id57cffc5666ee18078c08e412#findElement_E7045_57d00ca8ca80ff75f204b403_0

Автор: a0730 7.9.2016, 15:48
Отключи IPv6.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Stranny-ip-adres-id57cffc5666ee18078c08e412#findElement_E7045_57d00ca8ca80ff75f204b403_0

Автор: Elfer 8.9.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-средствами на автомате.

Автор: gta4kv 11.9.2016, 07:46
Нельзя привести эти "странные ip" к нормальному виду, потому что это и есть нормальный вид. GeoIP давно поддерживает IPv6, в чем проблема?

Автор: Elfer 12.9.2016, 23:20
Хорошо, почему тогда 2ip.ru показал привычный нам ip-адрес из цифр и точек? Попробую также поискать в сети базу ip-адресов и стран расширенную, с нестандартными ip. Очень мало информации в интернете по этому поводу, тяжело найти ответ. Вот рассчитываю на ответы гуру.

Автор: gta4kv 16.9.2016, 08:58
Еще раз, вам надо убрать из головы понятие про "нестандартные".
Тут все предельно просто, адреса в диапазон 1.1.1.1 - 255.255.255.255 (IPv4) заканчиваются, поэтому повсеместно вводится новый формат (IPv6). И это происходит уже достаточно давно.Информации об этом в интернете настолько много, что читать можно минимум месяц.

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

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

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


Автор: _zorn_ 16.9.2016, 16:26
Цитата(gta4kv @  16.9.2016,  15:58 Найти цитируемый пост)
 адреса в диапазон 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
Ну а 10.1.1.1 (кстати приватный диапазон по договоренности) 0x0A010101
and so on  smile 
Ну не хватило 32 бит на весь мир  smile 

Автор: gta4kv 16.9.2016, 18:14
Точняк. Не знаю откуда вообще придумал 1.1.1.1, даже 1.0.0.0 было бы логичнее  smile 

Автор: _zorn_ 16.9.2016, 18:20
Цитата(gta4kv @  17.9.2016,  01:14 Найти цитируемый пост)
даже 1.0.0.0 было бы логичнее

Кстати кому принадлежит эта сеть ? Хотел бы себе такую (как раньше аську шестизнак smile)

Цитата
descr:          Research prefix for APNIC Labs

Значит тоже "зарезервировано".
Писец, столько A сетей пропадает, а они IPv6 выдумывают smile

Хотя кто мы такие, чтобы стремать придумщиков за организацию и выдачу адресов...
128 бит хватит на каждый кросовок на планете )

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

Так что ответ ТС - скоро вы будете говорить про "127.0.0.1" - "странный айпи адрес"  smile 

ЗЫ. Кстати, знали что вся А сеть 127 - это локалхост ?  smile 
Т.е. 127.213.12.43 - тот же самый локалхост )
Это про "разумное" использование адресного пространства  smile

Добавлено через 14 минут и 36 секунд
Хотя кому я вру. Сам же не раз отшивал предложения типа "вставить определенное поведение для определенного объекта при определенных обстоятельствах".
А учитывая сколько сетевого оборудования (а там есть прошивки, ага) и т. п. в мире существует... пусть лучьше будут договоренности...

Автор: _zorn_ 16.9.2016, 18:55
Это я представил себя в качестве производителя сетевой железяки smile
Сейчас то "договоренности" не особо соблюдаются бывает. IPv6 по идее должно решить эту "проблему".
Но как видно проблема не в недостатке... хотя в нем тоже )

Автор: Elfer 18.9.2016, 21:59
Спасибо за толкование, надеюсь оно верное и прислушаюсь к этому. Поищу базу под IPv6 адреса.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)