PHP函数显示ipv4和ipv6


PHP function to show both ipv4 ipv6

我将服务器配置为双栈,允许ipv4和ipv6。然后,我想创建一个php页面来显示客户端机器是否通过ipv4, ipv6或两者连接。

我也尝试了$_SERVER['REMOTE_ADDR']和getenvbyhost("REMOTE_ADDR"),但它只返回一个或另一个,从不同时返回。

我还尝试了下面的代码

 function isIPv6($ip) {
   if(filter_var($ip, FILTER_VALIDATE_IP)) {
     if(filter_var($ip, FILTER_FLAG_IPV6)) {
       //It is IPv6 indeed.
     } else {
       //It is IPv4
     }
   } else {
     // Not a valid IP
   }
}

是否有可能从服务器获得两个ip ?

每个传入请求使用IPv4或IPv6,但不能同时使用两者。如果你想知道这两个,那么你需要触发多个连接到您的服务器使用不同的协议。

最常见的方法是创建两个额外的主机名:一个只有你的服务器的IPv4地址,一个只有你的服务器的IPv6地址。然后,对于您的回复(假设是HTML),您生成一个唯一的代码,并在页面中包含两个隐藏图像。一个使用IPv4-only主机名,一个使用IPv6-only主机名。两者都包含您在URL中生成的唯一代码,因此客户端不会缓存图像,并且您可以看到哪些图像请求属于一起。