【问题标题】:PHP function to show both ipv4 ipv6PHP函数同时显示ipv4 ipv6
【发布时间】:2016-01-17 19:04:56
【问题描述】:

我正在将服务器配置为双栈,同时允许 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 “对话”,但不能同时针对同一请求。

标签: php networking ipv6 ipv4


【解决方案1】:

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

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

这很麻烦,而且在大多数情况下不值得努力。

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 2018-11-29
    • 2021-07-30
    • 2018-07-14
    • 2021-11-08
    • 2013-07-03
    • 1970-01-01
    • 2015-03-28
    • 2017-12-17
    相关资源
    最近更新 更多