在 cloudflare 后面获取访问者 ipv4
Get visitors ipv4 behind cloudflare
我只是有问题,我想获取访问者的 IP 地址。一切都很好,但一位用户只是给我 IPv6。
这是我可以给你的代码,而且我刚刚安装了 cloudflare apache2 Mod.
$_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"] ? $_SERVER["HTTP_CF_CONNECTING_IP"] : $_SERVER["REMOTE_ADDR"];
$ip = $_SERVER['REMOTE_ADDR'];
if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])){
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
执行此操作的唯一方法是通过以下方式禁用 CloudFlare 中的 IPv6 支持:
1) 在 DNS 中删除所有 AAAA 记录(仅保留 A 记录)。
2) 在 CloudFlare 仪表板上进入网络并关闭 "IPv6 Compatibility".
虽然我不推荐这个;您可能很快就会发现无法连接到您网站的人。相反,最好确保您的平台完全支持 IPv6。
请注意,CF 使禁用 ipv6 变得稍微困难一些(从 gui 不可能,必须由 api 完成)但它们现在包含一个用于添加 'Pseudo IPv4' 地址的选项到 headers - 通过覆盖 Cf-Connecting-IP
和 X-Forwarded-For
或添加 Cf-Pseudo-IPv4
header.
对于(还)不支持 ipv6 的遗留应用程序,这可以作为 stop-gap 非常方便 - https://support.cloudflare.com/hc/en-us/articles/202494830-Pseudo-IPv4-Supporting-IPv6-addresses-in-legacy-IPv4-applications
我只是有问题,我想获取访问者的 IP 地址。一切都很好,但一位用户只是给我 IPv6。 这是我可以给你的代码,而且我刚刚安装了 cloudflare apache2 Mod.
$_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"] ? $_SERVER["HTTP_CF_CONNECTING_IP"] : $_SERVER["REMOTE_ADDR"];
$ip = $_SERVER['REMOTE_ADDR'];
if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])){
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
执行此操作的唯一方法是通过以下方式禁用 CloudFlare 中的 IPv6 支持:
1) 在 DNS 中删除所有 AAAA 记录(仅保留 A 记录)。 2) 在 CloudFlare 仪表板上进入网络并关闭 "IPv6 Compatibility".
虽然我不推荐这个;您可能很快就会发现无法连接到您网站的人。相反,最好确保您的平台完全支持 IPv6。
请注意,CF 使禁用 ipv6 变得稍微困难一些(从 gui 不可能,必须由 api 完成)但它们现在包含一个用于添加 'Pseudo IPv4' 地址的选项到 headers - 通过覆盖 Cf-Connecting-IP
和 X-Forwarded-For
或添加 Cf-Pseudo-IPv4
header.
对于(还)不支持 ipv6 的遗留应用程序,这可以作为 stop-gap 非常方便 - https://support.cloudflare.com/hc/en-us/articles/202494830-Pseudo-IPv4-Supporting-IPv6-addresses-in-legacy-IPv4-applications