2015-10-19 113 views
1

我正在配置一个服务器是双栈,允许ipv4和ipv6。然后,我想创建一个php页面来显示客户端机器是通过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 
    } 
} 

是否有可能从服务器获取两个IPS?

+0

我觉得你的网卡与ipv4或ipv6“说话”,但不能同时发出同样的请求。 – ChoiZ

回答

4

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

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

这是一个相当麻烦,并为大多数目的不值得的努力。