2013-07-31 194 views
29

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

这是为什么?这些命令之间有什么区别(我应该使用哪个?)。非常感谢!使用request.getRemoteAddr()返回0:0:0:0:0:0:0:1

+4

localhost将返回该IP。在其他计算机上,您将看到实际的IP。 – Makky

+0

谢谢@Makky你知道这两个命令之间的区别吗? – yaylitzis

+0

'getLocalAddr()'获取机器的IP地址以接收请求。 [来源](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getLocalAddr())。相反,'getRemoteAddr()'获得机器的IP地址以请求资源[Source](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRemoteAddr() )。 –

回答

29

就你而言,由于你试图在本地机器上访问它,所以它会返回该值。但是,让你的朋友访问它一个,你会收到预期的结果与getRemoteAddr

根据JavaDoc:

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

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

4

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

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

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

27

当我们从IPv4转向IPv6时,他们正在将环回地址(localhost)从127.0.0.1更改为0:0:0:0:0:0:0:1,这就是为什么您得到此地址。

至于功能:

  • getRemoteAddr()返回客户端的IP

  • getLocalAddr()返回应用 上

相关问题