2015-01-29 3 views
0

есть ли способ скрытого IPV4 в формате IPV6 или наоборот? Когда пользователь зарегистрировался или зарегистрировался на моем сайте, я сохраняю IP-адрес в базе данных. иногда хранится адрес в формате IPV6. Аутентификация пользователя проверяется на столбце ip-адреса. Но в следующий раз получает IP-адрес ipv4-формата. Так что в базе данных я не получаю этот IPV4 ip, потому что ранее сохраненный адрес IPV6. и аутентификация пользователя будет терпеть неудачу. Поэтому я хочу конвертировать IPV4 в IPV6.Преобразование IPV4 в IPV6 php

Спасибо.

+0

Добро пожаловать в Переполнение стека. См. Страницу «Как спросить». Вы должны предоставить некоторую информацию о том, что вы пробовали до сих пор. –

+2

«преобразование» этих типов невозможно, так как они не связаны друг с другом. IPv6 - это совершенно новая форма IP-адресов и не создается с IPv4-адреса. –

ответ

-1

Нет информации о типе хранения (строка, двоичная).

Вы можете попробовать это http://ipv6.ztsoftware.net/ipv4-to-ipv6/, но я не уверен, что это хорошая идея. Похоже, эта служба обеспечивает двоичное преобразование. Как сказано выше, формат IPv4 и IPv6 - это две разные вещи.

3

IPv6 - это не просто другой формат. IPv6 - полная замена IPv4. Нет никакого «преобразования» адреса IPv4 на IPv6-адрес. У вашего клиента либо есть IPv4-адрес, либо у него есть IPv6-адрес, период. Возможно, у них даже есть и то, и другое, но это будет только потому, что они одновременно запускают оба стека IP и могут быть достигнуты с помощью обоих методов; оба стека работают полностью независимо друг от друга, хотя оба могут внезапно изменять свои IP-адреса независимо. Они не коррелированы. Насколько вам известно, каждый IP (независимо от того, v4 или v6) является совершенно другим клиентом.

Вкратце: нет. IPv6 - это совершенно новый диапазон адресов. Представьте, что если IPv4 был расширен с 255 в качестве максимального значения для байта до 512, и появился бы новый новый диапазон -48888888; вот что такое IPv6.

0

Похоже, что вы выполняете белый IP-адрес каждого пользователя во время первоначальной регистрации. Если это так, то проблема, которую вы испытываете, нелегко разрешима. Если у ваших пользователей есть IPv4 и IPv6-адрес, вы не сможете управлять ими, которые они используют для подключения к вашему серверу (кроме отключения IPv6 на вашем сервере). Кроме того, этот метод не будет работать для пользователей с динамическим IP-адресом, так как они будут регулярно получать новый IP-адрес и не смогут аутентифицироваться.

Невозможно определить IPv4-адрес пользователей с их IPv6-адреса, так как нет гарантированной корреляции между IPv4-адресом пользователя и адресом IPv6 *. Как заявили другие, адреса IPv6 напрямую не преобразуются в адреса IPv4, так как они являются разными форматами. Адреса IPv6 - это намного большие числа (128-битные и 32-разрядные), поэтому преобразование адреса IPv6 в IPv4 было бы невозможным, даже если бы стандарт был разрешен для него.

*: Единственное исключение, которое я могу думать о соотношении между IPv4 и IPv6, будет в локальной сети с каждым устройством, имеющим статический частный IP. Если статические адреса IPv4 и IPv6 были выбраны так, чтобы они каким-то образом коррелировали, тогда было бы возможно определить адрес v4 из v6. Однако это маловероятно для большинства людей, и предполагается, что ваш сервер находится в той же локальной сети, что и конечные пользователи (так, чтобы он видел частные IP-адреса).

Учитывая высокую вероятность блокировки действительных пользователей (из-за динамических IP-адресов или IPv6), это, похоже, не является надежным способом защиты вашего сервера. Если у вас очень специфическая пользовательская база и динамические IP-адреса не являются проблемой, вы можете привязать свою страницу регистрации к IPv4-адресу и не прослушивать ее по адресу IPv6. Таким образом, вы, по крайней мере, можете получить свой адрес IPv4 при регистрации.

Edit: переписал мой ответ будет более relavent на вопрос

+0

Более вероятно, что он использует IP-адрес как часть идентификатора сеанса, что приводит к недействительности файлов cookie, когда пользователь переключается между IPv4 и IPv6. –

-1

Accourding в IPV4to6

я создал следующую функцию для вас в PHP, догадывался ваш ищет это:

function ipv4to6($ip=false) { 

if (!$ip) { 
    return; 
} 

$ipAddressBlocks = explode('.', $ip); 

if (count($ipAddressBlocks) == 0) { 
    return; 
} 

$ipv6  = ''; 
$ipv6Pieces = 0; 
foreach ($ipAddressBlocks as $ipAddressBlock) { 

    if ($ipv6Pieces%4 == 0 && $ipv6Pieces > 0) { 
     $ipv6 .= '::'; 
    } 

    $ipv6Piece = dechex($ipAddressBlock); 
    $ipv6 .= (is_numeric($ipv6Piece) && $ipv6Piece < 10 ? '0'.$ipv6Piece : $ipv6Piece); 

    $ipv6Pieces = strlen(str_replace('::', '', $ipv6)); 
} 

return $ipv6.'::/48'; 
} 

Вы можете использовать эту функцию:

echo ipv4to6('192.0.2.4'); 

Возврат: c000 :: 0204 ::/48

+0

Адрес IPv6, который вы получаете, 'c000 :: 0204 ::/48', является' RESERVED' и не маршрутизируется. –

Смежные вопросы