如何用PHP同时获取IPv6和IPv4地址?
如何同时获取用户的IPv4和IPv6地址
你的PHP脚本只拿到IPv6,是因为当前请求是通过IPv6协议建立的,REMOTE_ADDR只会返回当前连接使用的IP。那些能同时显示双栈地址的网站,通常用这几种方法:
双请求关联法
网站同时提供IPv4和IPv6接入(服务器监听两个协议的端口),浏览器可能会同时发起IPv4和IPv6请求(比如基于DNS解析的并行尝试)。网站会通过Cookie、会话ID或者浏览器指纹,把两次请求的IP关联起来,最终合并展示。IPv4专属资源探测
在页面中嵌入一个仅支持IPv4的资源(比如一张图片、一段小脚本),这个资源的域名只解析到IPv4地址。当用户加载页面时,浏览器会通过IPv4连接请求这个资源,此时处理该资源的脚本就能拿到用户的IPv4地址,再通过Cookie把这个地址和之前IPv6请求的会话绑定,最终在页面上同时显示两个IP。代理/CDN的特殊头(如果适用)
如果你用了CDN或反向代理,部分服务商可能会在请求头中同时传递IPv4和IPv6地址,但你说遍历了所有$_SERVER变量没找到,大概率你的环境没配置这个,或者服务商不支持。
需要注意的是,这些方法都依赖用户的网络环境支持双栈(同时有IPv4和IPv6地址),如果用户只有单栈地址,网站也拿不到另一个。
内容的提问来源于stack exchange,提问作者MichaelJC
相关产品推荐
相关产品推荐

