如何跟踪代理后面的真实IP地址

ked*_*ter 8 php

我们如何使用PHP跟踪代理背后的真实IP地址?我的意思是纯粹的PHP实现.因为他们可以关闭浏览器的js.BTW当JS打开时我可能会使用HTML 5地理位置所以我不这样做需要IP地址来定位用户.

Que*_*tin 12

您可以查看X-Forwarded-For HTTP标头(如果已发送),但无法保证知道.

  • 并且绝对清楚:**这个标题不能被信任**除非**所有**请求通过代理**你**控制并且没有请求可以直接到达你的服务器而无需通过代理或标题以某种方式被剥夺.有很多PHP应用程序,只要它可用,就可以无条件地使用该标头中的IP ... (5认同)

Cog*_*ero 10

这个PHP代码可以工作,对前向和反向代理很有用.对于反向代理,请注意X_FORWARDED_FOR标头信息(如果可用的话)可以伪造,并且根本不应该被信任.

if($_SERVER["HTTP_X_FORWARDED_FOR"] != ""){
   $IP = $_SERVER["HTTP_X_FORWARDED_FOR"];
   $proxy = $_SERVER["REMOTE_ADDR"];
   $host = @gethostbyaddr($_SERVER["HTTP_X_FORWARDED_FOR"]);
}else{
   $IP = $_SERVER["REMOTE_ADDR"];
   $proxy = "No proxy detected";
   $host = @gethostbyaddr($_SERVER["REMOTE_ADDR"]);
}
Run Code Online (Sandbox Code Playgroud)

  • 这是因为变量名称.$ IP应命名为`$ an_HTTP_header_that_may_looks_like_an_IP_address_possibly_faked` (2认同)
  • @Cogicero:请考虑更新此答案以使用`$ _SERVER`数组而不是`$ HTTP_SERVER_VARS`.在最近的PHP版本中,默认情况下后者已过时并禁用. (2认同)

Mar*_*cin 1

代理后面的用户没有全局可路由的 IP 地址。如果您想维护会话状态,最好生成一个会话密钥,并将其设置为 cookie,或将其保留在 URL 中(这种方法需要权衡)。

如果您确实想找出他们自己网络上的 IP 地址,您可以在页面中使用 javascript 来查找,然后将其发送回您的服务器。