0

我正在尝试通过获取他们的 IP 来建立一个数据库,其中包含对我网站上特定页面的唯一访问者的记录。

下面的代码获取访问者的 IP:

$getip = $_SERVER['REMOTE_ADDR'];
echo "<b>IP Address: $getip</b>";

但是我意识到,如果不同的互联网用户在一个特定的互联网网络上并且他们都使用不同的计算机共享相同的 IP 地址(如公共网吧或见下面的示例),这是非常不可靠和不准确的。

例子:

XYZ Ltd 使用特定的互联网连接,如果 XYZ Ltd 的所有员工都通过公司互联网连接连接到互联网,并且 XYZ Ltd 的 IP 地址是 69.18.107.24。如果 XYZ 的某些员工访问我的页面,上面的代码不会给我用户计算机的唯一 IP 地址,而是我会不断获取公司 IP 地址 (69.18.107.24),这是不准确且具有欺骗性的,因为应用程序会看到它是同一个访问者,而有不同的访问者使用互联网连接 IP。

无论他们是否共享相同的互联网连接,我如何才能根据用户的计算机获取唯一的用户 IP。

我不想使用 PHP cookie,因为有些浏览器不支持它,而有些用户禁用它或其他东西。

非常感谢获得帮助...谢谢!

4

3 回答 3

3

你不能。IP 地址是一种数据包传送机制。没有什么可以保证特定网络中的 IP 地址对于一台特定的机器是唯一的,根本不存在这种相关性。机器在其网络中有一个唯一的地址,但这个地址可能不是全球唯一的(而且你无论如何也无法获得这个 IP)。共享代理的公共 IP 在公共互联网上是唯一的,但没有规定它必须对应于一台物理机器。

IPs != 机器,忍受它。

于 2013-02-25T17:18:43.640 回答
3

无法获取共享连接后面的计算机的本地 IP。即使你能得到它们,它们也不会是独一无二的,因为它们被重复使用——这就是NAT的全部意义所在。你会有很多人使用192.168.1.1或类似的地址。

如果您想区分共享相同 IP 地址的多台机器,您可以添加另一个因素,例如往往不同的用户代理字符串。

例如:

<?php
md5(
    $_SERVER['REMOTE_ADDR'] .
    $_SERVER['HTTP_USER_AGENT']
);
// 80b567b7c7ccfbda75a9712f16ca4429

只会在两个用户共享相同的 IP 地址并具有相同的浏览器和操作系统版本时才会给您一个相同的哈希值。

访问Panopticlick以了解有关“浏览器指纹识别”的更多信息。令人惊讶的是,浏览器的配置组合几乎是独一无二的。如果您使用 Javascript 进行客户端分析,您可以在其中访问显示分辨率、安装的插件版本和其他详细信息,您可以轻松区分具有共享 IP 的用户。

于 2013-02-25T17:34:29.533 回答
-1

这是您的问题的答案:

<?php

echo "IP address".$_SERVER["REMOTE_ADDR"]

echo "LAN Address".$_SERVER["HTTP_X_FORWARDED_FOR"] 
?>

这不是获得唯一访问者的可靠方法。LAN地址很容易被欺骗。此外,许多公司使用 DHCP 服务器,每天都会提供新的 LAN IP。Cookie 将是“唯一”真正的检查方式。

于 2013-02-25T17:24:01.187 回答