将IPV4转换为IPV6 php

问题描述 投票:0回答:5

有没有办法将IPV4转换为IPV6格式,反之亦然?当用户注册或登录到我的网站时,我正在将IP地址存储在数据库中。有时用户使用IPV6格式存储地址。用户的身份验证正在检查ip地址列。但是下一次用户的IPV4格式的ip地址正在获取。因此,在数据库中我没有得到这个IPV4 ip,因为先前存储了IPV6地址。用户身份验证将失败。所以我想将IPV4转换为IPV6。

谢谢。

php ip ipv6 ipv4
5个回答
2
投票

IPv6不仅是一种不同的“格式”。 IPv6完全替代了IPv4。没有将IPv4地址“转换”为IPv6地址。您的客户端有一个IPv4地址,或者有一个IPv6地址(句号)。也许它们甚至都拥有,但这仅是因为它们并行运行两个IP堆栈,并且可以通过这两种方法进行访问。虽然这两个堆栈完全彼此独立地运行,但是两者都可能突然独立地更改其IP。它们没有关联。据您所知,每个IP(无论是v4还是v6)都是一个完全不同的客户端。

总之:不。 IPv6是一个全新的地址范围。想象一下,如果将IPv4从255作为一个字节的最大值扩展到512,并且整个新范围256.0.0.0512.512.512.512将变为可用;这就是IPv6。


0
投票

听起来好像您在初始注册过程中将每个用户的IP列入白名单。如果真是这样,那么您遇到的问题就很难解决。如果您的用户同时拥有IPv4和IPv6地址,则将无法控制他们用来连接到服务器的用户(除了在服务器上禁用IPv6之外)。此外,此方法不适用于具有动态IP地址的用户,因为他们会定期获得新的IP分配并且无法进行身份验证。

无法从用户的IPv6地址确定用户的IPv4地址,因为在用户的IPv4和IPv6地址之间没有保证的关联*。正如其他人所述,IPv6地址不会直接转换为IPv4地址,因为它们是不同的格式。 IPv6地址的数量要大得多(128位和32位),因此即使标准允许,也无法将IPv6地址转换为IPv4。

*:我能想到的关于IPv4和IPv6的唯一例外是在LAN上,每个设备都有一个静态私有IP。如果选择了静态IPv4和IPv6地址,以便它们以某种方式关联,则可以从v6地址中确定v4地址。不过,对于大多数人来说,这不是一个可能的设置,它假定您的服务器与最终用户位于同一局域网中(这样它将看到私有IP)。

鉴于锁定有效用户的可能性很高(由于动态IP或IPv6),这似乎不是保护服务器安全的可靠方法。如果您有非常特定的用户群,而动态IP并不是问题,则可以将注册页面绑定到IPv4地址,而不必让其侦听IPv6地址。这样,您至少可以确保在注册时获得其IPv4地址。

[Edit:重写了我的答案,以便更关注该问题


0
投票

要将IPv4转换为IPv6,请查看此帖子https://programmingtips.net/2766-php-convert-ipv4-to-ipv6.html


-1
投票

没有有关存储类型(字符串,二进制)的信息。

您可以尝试使用此http://ipv6.ztsoftware.net/ipv4-to-ipv6/,但我不确定这是个好主意。似乎此服务提供二进制转换。如上所述,IPv4和IPv6的格式-这是两件事。


-1
投票

依据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

© www.soinside.com 2019 - 2024. All rights reserved.