最近在弄nginx反向代理,引发了对获取用户IP的深入学习(以前发的帖子都没有满意结贴,没的返还50%积分,还有编辑器难用,抱怨一下)。
我在北京用的是宽带通的宽带,他们肯定有自己的服务器(缓存啥的,我也不懂的),请求网站的时候,肯定是通过他们的服务器的,而且是匿名代理,这一点通过下面贴出来的服务器接收的请求头可以看出来。
这样就导致了获取的用户IP是宽带提供商的服务器IP地址,而不是宽带提供商分配给用户的IP地址。
经过测试,得出下面这些数据:
1、223.21.65.225 宽带提供商给路由器分配的IP地址(真实IP)
2、118.186.134.251 服务器端收到用户的IP地址(代理服务器IP)
3、118.186.134.251 百度加速乐查询到用户的IP地址(代理服务器IP)
4、223.21.65.225 ip138.com查询到的IP地址(真实IP)
5、访问ip138.com时,携带X-Forwarded-For=2.2.2.2请求头,难么查询到的IP就2.2.2.2(虚假IP)
在程序里我用getRemoteAddr,getHeaders("X-Forwarded-For")均无法获取到真实IP地址,百度加速乐也没有正确获取到,由此我纳闷ip138是如何的到我真实IP的,还是有什么新的获取IP地址的方法?请csdn各位牛人指教
****以下是图片,供参考****
宽带提供商给路由器分配的IP地址223.21.65.225:
服务器端收到的IP地址118.186.134.251:

其中并没有X-Forwarded-For请求头,因此我判断是通过了透明代理(宽带通服务器),没获取到真实的IP地址。
验证一下,通过百度加速IP归属地查询获取到地址118.186.134.251:

和我获取的IP地址是一样的,并不是我真实的IP地址。
但是ip138却获取到了我真实的IP地址223.21.65.225:
(http://iframe.ip138.com/ic.asp,他什么也没做,请求了就直接返回IP地址,因此我截源码的图片)

结果是ip138确实获取到了我的IP地址。
验证一下,我添加X-Forwarded-For请求头,然后访问ip138,IP2.2.2.2:
