我一直在寻找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,你有三个选择:
- 探查代理服务器的传入请求
- 破解代理服务器并读取其日志
- 获得法院命令,让代理服务器的运营商为您披露该IP
前两个选项是非法的。第三种选择过于合法。它们都无法帮助您实时获取原始IP。
无论如何,即使你设法找到"真正的"IP并屏蔽它,用户仍然可以断开互联网连接并重新连接以获得新的IP。这是书中最古老的技巧——尽管这是一个互联网技巧,但我不会惊讶地发现它比互联网本身更古老。。。
当然,如果他们使用公共WiFi或其他东西,这个技巧是行不通的。但如果是这样的话,你会屏蔽整个大学,因为一名学生在使用公共WiFi时滥用了你的服务器。。。