首页 java算法 JAVA获取真实ip地址问题(记录)

JAVA获取真实ip地址问题(记录)

第一种 本地访问 获取到ip获取到0:0:0:0:0:0:0:1 问题原因: 这种情况只有在服务器和客户端都在同一台电脑…

第一种 本地访问 获取到ip获取到0:0:0:0:0:0:0:1

问题原因: 这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现)

搞定方法:

  1. 本机访问的时候用127.0.0.1或本机ip代替localhost即可解决
  2. /etc/hosts这个东西作怪(在windows上应该是C:\Windows\System32\drivers\etc\hosts这个文件),只需要注释掉文件中的 # ::1 localhost 这一行即可解决问题

第二种 代理访问获取到的ip,如何获取真实ip

第一种情况:不通过代理上网,服务器端拿到真实IP

第二种情况:通过代理服务器如:Nginx,Squid等一层代理或多层代理上网,如下图:

nginx一般转发都是

从X-Forwarded-For的定义来看,ips[0]才是原始客户端ip,如果这个都不是,那拿第二个就更不靠谱了,我们平时检验的时候,可能是直接在内网挂代理去访问的,跟外面网友访问经过的网络路径不一样,后面不停添加的是经过的每一层代理ip才对,下面举例说明;

所以访问的流程应该是这样,客户端58.63.227.162发出请求,经过192.168.237.178, 192.168.238.218两层转发,到了192.168.239.196这台NGINX上,NGINX就把X-Real-IP头设成了自己看到的remote_addr,也就是直接发给到他的192.168.238.218,这时候resin收到这个包,对resin来说直接发给他的remote_addr就是NGINX的ip,也就是192.168.239.196,那么resin里面的request.getRemoteAddr()就是192.168.239.196,那么在resin里拿最原始的ip逻辑(也就是拿能够知道的最外层的ip)应该是这样:

如果XFF不为空,拿XFF的左边第一个

如果XFF为空,拿XRI

如果XRI为空,只能拿request.getRemoteAddr(),也就是只能拿到最直接发给他的机器ip了,

推荐代码这么写

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

工作中java代码编写总结建议(持续更新)

工作中java代码编写总结建议(持续更新)

1.对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。 特别是帮助类的代码 2.每个名...
git简单学习(二)

git简单学习(二)

git 和svn有个区别就是暂存区 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区; 第二步是...
web缓存的了解

web缓存的了解

什么是Web缓存,为什么要使用它? Web缓存游走于服务器和客户端之间。这个服务器可能是源服务器(资源所驻留的服务器Ad...
小程序 wxss样式总结

小程序 wxss样式总结

display属性 none:此元素不会被显示 block:两个元素自动换行 inline:两个元素靠在一起 inher...
RedisDesktopManager 打开报0xc000007b程序错误

RedisDesktopManager 打开报0xc000007b程序错误

若发生这个问题,非常的简单,只要打开该软件的安装目录,双击运行下面的vcredist_x86.exe即可,这是由于在安装...
返回顶部