如何获取稳定的真实ip?

膜拜tomato
  • 102

服务端我用remote_addr 判断用户的ip,判断用户登入的cookie是根据密码和remote_addr 获取的ip生成的,今晚在酒店测试时 发现出错了。 连的wifi, 服务端获取的 remote_addr 总是变来变去,
可是在ip138上 看到的ip确是不变的 和服务端获取的remote_addr 也不一样,他是怎么实现的呢?如何获取客户真实的公网ip呢?

回复
阅读 3.2k
1 个回答

整体思路:需要依次检查HTTP_CLIENT_IPHTTP_X_FORWARDED_FORREMOTE_ADDR这三个是否
存在,只要一旦有一个存在就结束

其中对获取ip的三个属性HTTP_VIAHTTP_X_FORWARDED_FORREMOTE_ADDR在使用代理服务器时获取的情况
一、没有使用代理服务器的情况:
REMOTE_ADDR = 自己的真实IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用Transparent Proxies(透明代理)服务器的情况
REMOTE_ADDR = 最后一个代理服务器IP
HTTP_VIA = 代理服务器IP
HTTP_X_FORWARDED_FOR = 自己的真实IP

三、使用Anonymous Proxies(匿名代理)服务器的情况
REMOTE_ADDR = 最后一个代理服务器IP
HTTP_VIA = 代理服务器IP
HTTP_X_FORWARDED_FOR = 代理服务器IP

四、使用Distorting Proxies(欺骗代理)服务器的情况:
REMOTE_ADDR = 代理服务器IP
HTTP_VIA = 代理服务器IP
HTTP_X_FORWARDED_FOR = 随机IP,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

五、使用Elite Proxies服务器的情况
REMOTE_ADDR = 代理服务器IP
HTTP_VIA = 没有数值或不显示
HTTP_X_FORWARDED_FOR = 没有数值或不显示,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

综上来看,PHP获取客户端真实IP的方法并不是能够百分之百成功的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏