request.getRemoteAddr()获取ip地址时得到的值是0:0:0:0:0:0:0:1原因和解决方法
项目场景:
使用request.getRemoteAddr()获取ip地址,这个只是需求中的一个,像获取id,登陆用户名,用户ip,登陆登出日志,用户访问了哪些方法,做了什么事情,总体来说就是用户登录登出日志,监控用的。现在的项目一般都是使用了Nignx等反向代理的。
问题描述:
在使用request.getRemoteAddr()获取ip地址的时候得到的值是[0:0:0:0:0:0:0:1],这个是我在做需求测试的时候发现后台日志返回的ip地址长这个样子,所以研究了一下。
原因分析:
0:0:0:0:0:0:0:1是属于ipv6,后来我又进行另一台电脑做测试,发现这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现),这是hosts配置文件的问题 。我就是在访问项目的时候使用了localhost,
解决方案:
注释掉C:\Windows\System32\drivers\etc\hosts文件里的# ::1 localhost这行即可解决问题。网上这种方式可以,我去找到这个文件发现里面是没有这一行内容的。
最有效的方式就是改变请求的ip,不要使用localhost:8080
使用127.0.0.1:8080或者ip:8080。
上面已经解释完毕,另外多写一些方便更深入的理解。
jsp页面中用request.getRemoteAddr()获取的IP地址竟然为0:0:0:0:0:0:0:1 换台机器IP显示正常,这是为什么呢,照道理讲,应该是127.0.0.1才对,为什么这个获取的值变成了ipv6了呢,而且我发现这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现),后来上网查了查原因。
原来是/etc/hosts这个东西作怪(在windows上应该是C:\Windows\system32\drivers\etc\ hosts这个文件),只需要注释掉文件中的 # ::1 localhost 这一行即可解决问题。另外localhost这个文件很有用,这里你可以添加自己的条目,例如添加 192.168.0.212 myweb 这样子,在浏览器中原来只能使用192.168.0.212来访问的,并可以使用myweb来进行替换。
我用的win7系统 同样遇到此问题,打开文件发现 # ::1 localhost 已注释 没有解决问题;后来强制改成
127.0.0.1 localhost
# 127.0.0.1 activate.adobe.com
# ::1 localhost
修改保存之后只要重启一下Tomcat服务器就可以啦。
ps:
在IPv6的单播地址中有两种特殊地址,0:0:0:0:0:0:0:0
全零(可简写为::)的地址叫未指定地址,一般不分配给主机
和0:0:0:0:0:0:0:1, (可简写为::1)的地址叫环回地址,用来检测本主机协议是否正确安装
参考内容:
https://blog.csdn.net/liquid_road/article/details/117404500
https://www.cnblogs.com/m3Lee/p/3808002.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)