我正在尝试打印登录用户在我的网络应用程序的IP地址。如果用户使用IP地址192.168.10.120:8080/WebApplication
从另一台PC(在同一网络下,因为Web应用程序正在我的PC上运行)连接,则代码request.getRemoteAddr()
或request.getLocalAddr())
将返回他的IP地址。当我从运行Web应用程序的PC登录时,我得到这个IP地址0:0:0:0:0:0:0:0:1。
为什么会这样?这些命令之间有什么区别(我应该使用哪个?))。非常感谢!
4条答案
按热度按时间ffdz8vbo1#
当我们从IPv4转移到IPv6时,他们正在将环回地址(localhost)从
127.0.0.1
更改为0:0:0:0:0:0:0:1
,这就是为什么您会获得此地址。至于功能:
getRemoteAddr()
返回客户端IPgetLocalAddr()
返回运行应用程序的服务器的IPzpjtge222#
在您的情况下,当您试图在本地计算机上访问它时,它将返回该值。但是让您的一个朋友访问它,您将收到预期的结果
getRemoteAddr
。在javadoc中:
getRemoteAddr -返回发送请求的客户端或最后一个代理的IP地址
getLocalAddr -返回接收请求的接口的IP地址。
t1qtbnec3#
**getRemoteAddr()**解决了您的目的,但如果客户端位于任何代理之后,则您将获得代理的IP地址:
返回发送请求的客户端或上一个代理的Internet协议(IP)地址。
**getLocalAddr()**返回应用运行的服务器IP。
ivqmmu1c4#
如果您想获取127.0.0.1而不是0:0:0:0:0:0:0:1,则使用以下属性CATALINA_OPTS="$CATALINA_OPTS -Djava.net.preferIPv4Stack=true”启动应用程序服务器进程