有没有一种万无一失的方法可以获得客户端的正确ip地址


Is there a foolproof way to get the CORRECT ip address of a client?

我一直在寻找SO,发现通过使用$_SERVER['REMOTE_ADDR'],您可以获得客户端的IP地址。

问题是,如果客户端使用代理,则该值很可能不是客户端的真实IP地址。

有些人建议同时使用$_SERVER['REMOTE_ADDR']$_SERVER['HTTP_X_FORWARDED_FOR'],比如这个问题的公认答案:如何在PHP中获得客户端IP地址?

但问题是,就像大多数评论所说的那样,$_SERVER['HTTP_X_FORWARDED_FOR']非常不可靠,任何人都可以轻松编辑。

所以,我想知道的是,获取客户端真实IP地址的最佳方式是什么

附言:我不认为这个问题是重复的;在这个问题中,我要问的是$_SERVER['REMOTE_ADDR']$_SERVER['HTTP_X_FORWARDED_FOR']之外的方法,它们是类似问题的答案。我还解释了这个问题的答案是不够的,如第4段所示。

如果用户使用匿名代理,则该代理不会通过X-Forwarded-For标头显示其IP,这就是匿名代理的全部意义。这意味着代理代表用户发送的请求不会显示IP地址。如果你想检测原始IP,你有三个选择:

  1. 探查代理服务器的传入请求
  2. 破解代理服务器并读取其日志
  3. 获得法院命令,让代理服务器的运营商为您披露该IP

前两个选项是非法的。第三种选择过于合法。它们都无法帮助您实时获取原始IP。

无论如何,即使你设法找到"真正的"IP并屏蔽它,用户仍然可以断开互联网连接并重新连接以获得新的IP。这是书中最古老的技巧——尽管这是一个互联网技巧,但我不会惊讶地发现它比互联网本身更古老。。。

当然,如果他们使用公共WiFi或其他东西,这个技巧是行不通的。但如果是这样的话,你会屏蔽整个大学,因为一名学生在使用公共WiFi时滥用了你的服务器。。。