【问题标题】:fetching unique ip address of computers on an internet network in php在php中获取Internet网络上计算机的唯一IP地址
【发布时间】:2013-02-25 17:11:11
【问题描述】:

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

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

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

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

例子:

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

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

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

如果能得到这方面的帮助将不胜感激...谢谢!

【问题讨论】:

  • 共享公共地址后面的大多数计算机都有私有地址。你真的想要那些吗?
  • 是的,我不介意那些?...会寻求帮助..谢谢!
  • 即使您可以(并且您不能,请参阅 deceze 的回答),像 192.168.0.1 这样的私人地址也可以被 100,000,000 台计算机共享。它比69.18.107.24 准确度低几个数量级。

标签: php ip visitors


【解决方案1】:

无法获取共享连接后面的计算机的本地 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】:

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

IPs != 机器,接受它。

【讨论】:

    【解决方案3】:

    这是您问题的答案:

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

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

    【讨论】:

    • 路由器与代理不同。 LAN 通常位于路由器后面,它们从不泄露私有地址。 (反对者应该愿意解释这一点。)
    • 感谢您的帮助。就像你说的那样,这很容易被欺骗,而且 php cookie 本来是最好的选择,但有些浏览器不支持它,而有些用户可能只是禁用或调整他们对 cookie 或其他东西的设置......所以我只是坚持如何跟踪独特访客信息...
    猜你喜欢
    • 2014-04-15
    • 2011-11-04
    • 2011-06-12
    • 2012-09-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多