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

Sha*_*lam 3 php ip ipv4 ipv6

我有一个脚本,它向另一台服务器发送请求,但问题是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;
    }
Run Code Online (Sandbox Code Playgroud)

但是这个函数只返回一个IPv地址。我怎样才能获得所有时间IPv4或获得两个地址?

Que*_*tin 9

你不能。

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

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

  • 如果你不能,那么这里是如何完成的?https://whatismyipaddress.com (5认同)
  • 这很可能是通过重定向(使用 Javascript?)或分别请求 IPv6 或仅 IPv4 地址来完成的,并使用它来返回带有丢失地址的响应。例如:通过 IPv4 连接,现在已找到该 IP。使用 Javascript 请求 ipv6test.service.tld 以获取丢失的地址。 (2认同)

dec*_*eze 9

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

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

  • @Mark是的,他们似乎有显式子域“ds4.whatismyipaddress.com”,该子域仅通过 IPv4 提供服务,并且该页面使用唯一令牌向该子域发出显式请求,因此可以链接回原始 IPv6请求(或反之亦然)。 (2认同)