如何使用PHP代码获取IPv4和IPv6地址?

时间:2018-07-09 11:58:10

标签: php ip ipv6 ipv4

我有一个向其他服务器发送请求的脚本,但是问题是IPv6不被支持,所以如果我发送IPv6则给出错误,所以我需要以下两个之一:

  1. 始终获取IPv4地址 或
  2. 同时获取IPv4IPv6地址

我使用此代码来获取IP地址

function getRealIP()
    {
        if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        } elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
            $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } elseif (isset($_SERVER["HTTP_X_FORWARDED"])) {
            $ip = $_SERVER["HTTP_X_FORWARDED"];
        } elseif (isset($_SERVER["HTTP_FORWARDED_FOR"])) {
            $ip = $_SERVER["HTTP_FORWARDED_FOR"];
        } elseif (isset($_SERVER["HTTP_FORWARDED"])) {
            $ip = $_SERVER["HTTP_FORWARDED"];
        } else {
            $ip = $_SERVER["REMOTE_ADDR"];
        }

        // Strip any secondary IP etc from the IP address
        if (strpos($ip, ',') > 0) {
            $ip = substr($ip, 0, strpos($ip, ','));
        }
        return $ip;
    }

但是此函数仅返回一个IPv地址。如何获得所有时间IPv4或同时获得两个地址?

2 个答案:

答案 0 :(得分:4)

你不能。

只有来自请求的IP地址可用。

没有可靠的方法来识别路由到同一台计算机的其他IP地址(我的笔记本电脑当前有12个IP地址)。

答案 1 :(得分:3)

客户端将仅使用一种协议将请求发送到您的服务器。它不会同时使用 IPv4和IPv6发送请求,并且无法交错两种协议,并且IPv4地址也不会转换为等效的IPv6地址。如果客户端使用IPv4发送了请求,则您将获得IPv4地址。如果他们使用IPv6发送了请求,您将获得IPv6地址。期。故事结束。

如果需要一个IPv4地址,则必须在服务器/ DNS条目上禁用IPv6支持,因此所有客户端都必须使用IPv4作为唯一可用的协议。但这也将是当今时代倒退的可怕一步。