Cloudflare头信息返回IPv6地址。

3

我有一个简单的php脚本,当用户连接到我的网站时记录他们的IP地址,我的网站使用CloudFlare。我使用$_SERVER["HTTP_CF_CONNECTING_IP"];来返回客户端的IPv4地址,以便将其记录到带有日期和时间的文件中,但有时它会记录IPv6地址。

if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}
$filename = 'loggedips.txt';
$myfile = fopen($filename, "r") or die("Unable to log IP!");
$string = fread($myfile,filesize($filename)).date(DATE_RFC2822)." -- $ip\r\n";

$fp = fopen($filename, 'w') or die("Unable to log IP!");
fwrite($fp, $string);
fclose($fp);

在我的日志中,我看到了混合使用IPv4地址和IPv6地址的情况。
Thu, 23 Feb 2017 19:08:40 +0100 -- 99.253.44.66
Thu, 23 Feb 2017 19:10:14 +0100 -- 2003:00o1:4hc0:e68c:3113:7l06:2qf1:6e84

记录IPv6地址对我没有用处,所以我想知道如何解决这个问题,以便只记录IPv4地址。什么原因导致了这个问题?

2个回答

4

很抱歉,我的朋友,这是不可能的。你的客人不能同时使用他的IPv4IPv6来调用你的服务器,他使用哪个IP取决于他的网络配置和你的。

未经他的允许,你无法获取他的信息。


实际上,我找到了一个将IPv6转换为IPv4的PHP脚本,它可以正常工作。唯一的问题是被记录下来的IPv6地址会被发送到Cloudflare。 - Max Parrott

0

您可以通过手动查看此结果来查看和检查所有客户端发送的标头。

var_dump($_SERVER);die();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接