61

我正在尝试在我的 webApplication 中打印登录用户的 IP 地址。如果用户使用 IP 地址从另一台 PC(在同一网络下,因为 Web 应用程序在我的 PC 中运行)连接,192.168.10.120:8080/WebApplication则代码request.getRemoteAddr()request.getLocalAddr())返回他的 IP 地址。当我从运行 Web 应用程序的电脑登录时,我得到这个 IP 地址 0:0:0:0:0:0:0:1。

这是为什么?这些命令之间有什么区别(我应该使用哪个?)。非常感谢!

4

3 回答 3

63

在您的情况下,当您尝试在本地计算机上访问它时,它将返回该值。但是让您的一位朋友访问它,您将收到预期的结果getRemoteAddr

从javadoc:

getRemoteAddr - 返回发送请求的客户端或最后一个代理的 IP 地址

getLocalAddr - 返回接收请求的接口的 IP 地址。

于 2013-07-31T07:43:56.497 回答
61

当我们从 IPv4 转移到 IPv6 时,他们正在将环回地址 (localhost) 更改为0:0:0:0:0:0:0:1127.0.0.1这就是您获得此地址的原因。

至于功能:

  • getRemoteAddr()返回客户端 IP

  • getLocalAddr()返回运行应用程序的服务器的 IP

于 2014-06-09T06:46:07.777 回答
8

getRemoteAddr()解决了您的目的,但如果客户端在任何代理后面,那么您将获得代理的 IP 地址:

返回发送请求的客户端或最后一个代理的 Internet 协议 (IP) 地址。

getLocalAddr ()返回运行应用程序的服务器的 IP。

于 2013-07-31T07:42:24.677 回答