如何使用 PHP 代码同时获得 IPv4 和 IPv6 地址?

How can I get both IPv4 and IPv6 address using PHP code?

我有一个向另一台服务器发送请求的脚本,但问题是 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;
    }

但是这个函数只有returns一个IPv地址。如何获得所有时间 IPv4 或同时获得两个地址?

你不能。

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

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

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

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