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


fetching unique ip address of computers on an internet network in php

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

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

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

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

示例:

如果XYZ有限公司的所有员工都通过公司互联网连接连接到互联网,且XYZ有限公司IP地址为69.18.107.24,则XYZ有限公司使用特定的互联网连接。如果XYZ的一些员工访问我的页面,上面的代码不会给我用户计算机的唯一IP地址,而是我会一直得到公司的IP地址(69.18.107.24(,这是不准确和欺骗性的,因为应用程序会将其视为同一访问者,而使用互联网连接IP的访问者不同

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

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

如果能得到帮助,我将不胜感激。。。谢谢

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

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

例如:

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

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

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

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

IP!=机器,与之共存。

以下是您的问题的答案:

<?php
echo "IP address".$_SERVER["REMOTE_ADDR"]
echo "LAN Address".$_SERVER["HTTP_X_FORWARDED_FOR"] 
?>

这不是一个确定的方式来获得一个独特的访客。局域网地址很容易被伪造。此外,许多公司使用DHCP服务器,该服务器每天都会发出新的局域网IP。Cookie将是"唯一"真正的检查方式。