在php中获取互联网上的计算机的唯一IP地址

时间:2013-02-25 17:11:11

标签: php ip visitors

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

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

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

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

示例:

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

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

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

非常感谢获得这方面的帮助......谢谢!

3 个答案:

答案 0 :(得分:3)

你做不到。 IP地址是数据包传递机制。没有什么能保证特定网络中的IP地址对于一台特定的机器是唯一的,根本就没有这种相关性。该机器在其网络中具有唯一的地址,但该地址可能不是全局唯一的(并且您无论如何都无法获得此IP)。共享代理的公共IP在公共互联网上是唯一的,但没有任何规定它必须对应于一台物理机。

IP!=机器,与之共存。

答案 1 :(得分:2)

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

如果要区分共享相同IP地址的多台计算机,可以添加另一个因素,例如user agent string,这些因素往往不同。

例如:

<?php
md5(
    $_SERVER['REMOTE_ADDR'] .
    $_SERVER['HTTP_USER_AGENT']
);
// 80b567b7c7ccfbda75a9712f16ca4429
如果两个用户共享相同的IP地址并且具有相同的浏览器和操作系统版本,

将为您提供仅相同的哈希值。

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

答案 2 :(得分:-1)

以下是您的问题的答案:

<?php

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

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

这不是一个获得独特访客的可靠方法。 LAN地址可以轻松欺骗。 此外,许多公司使用DHCP服务器,每天都提供新的LAN IP。 Cookies将是“唯一”真实的检查方式。