определение ipv6 адреса на php

Discussion in 'PHP' started by GAiN, 8 Nov 2014.

  1. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    Можно ли в php определить и отобразить ipv6 адрес ?
    $_SERVER['REMOTE_ADDR'] - показывает обычный ip
    можно конечно сравнение сделать, если не ipv4 то значит ipv6
    Суперглобальный массив $_SERVER может отобразить ipv6 ? например тот же $_SERVER['REMOTE_ADDR'] заставить это делать
    понятно что ipv6 ещё мало распространен и нова среди использования, но вычеслять его вскорем придётся, а так же блокировать, фильтровать по geoip и все другие манипуляции.
    получаетя что php не поддерживает ipv6? нет таких переменных которые отображают его значение ?

    php $_SERVER['REMOTE_ADDR'] не определяет ipv6 да и разве что такими способами определяю, но это не надёжно:

    PHP:
    <?php 
    function getRealIpAddr() { 
    if (!empty(
    $_SERVER['HTTP_CLIENT_IP'])) 
    $ip=$_SERVER['HTTP_CLIENT_IP']; } 
    elseif (!empty(
    $_SERVER['HTTP_X_FORWARDED_FOR'])) 
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } 
    else { 
    $ip=$_SERVER['REMOTE_ADDR']; } 
    return 
    $ip

    $ip_adres getRealIpAddr(); 
    if ( 
    array_key_exists('addr'$_GET) ) 
    $ip $_GET['addr']; 
    else 
    $ip $ip_adres

    $v6 preg_match("/^[0-9a-f]{1,4}:([0-9a-f]{0,4}:){1,6}[0-9a-f]{1,4}$/"$ip); 
    $v4 preg_match("/^([0-9]{1,3}.){3}[0-9]{1,3}$/"$ip); 

    if ( 
    $v6 != 
    $type "IPv6"
    elseif ( 
    $v4 != 
    $type "IPv4"
    else 
    $type "unknown"

    echo 
    json_encode(array("ip" => $ip"type" => $type)); 
    ?>
     
  2. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    Вмысле показывает обычный IP? то есть IPv4?
    Если показывает адрес обычный IPv4, то значит подключение в вэб-серверу произошло по интерфейсу IPv4.
    Нужно смотреть настройки вэб-сервера, интерфейс IPv6 должен быть настроен. Потом подключение лучше делать по IP-адресу (версии 6).
     
  3. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    нет, не определяет ip если подключиться через ipv6
    может сервер хостера не настроен ?

    $_SERVER['REMOTE_ADDR'] должен отображать ipv6 если на страницу зайти с 6 версии ip ?
     
  4. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,146
    Reputations:
    236
    Синтакс еррор ин регекс.
    PHP:
    $v6 preg_match("/^[0-9a-f]{1,4}:([0-9a-f]{0,4}:){1,6}[0-9a-f]{1,4}$/"$ip);
    не увидит скрипт ipv6.
    в начале нужно найти '[', пропущенный в строке поиска.