我想在我的Web应用程序中打印已登录用户的IP地址。如果用户从另一台PC连接(该计算机与Web应用程序运行在我PC上的同一网络下)并使用IP地址192.168.10.120:8080/WebApplication
,那么代码request.getRemoteAddr()
或request.getLocalAddr()
将返回他的IP地址。当我从运行Web应用程序的PC登录时,我得到的IP地址是0:0:0:0:0:0:0:1。
为什么会这样?这些命令有什么区别(应该使用哪个)?非常感谢!
我想在我的Web应用程序中打印已登录用户的IP地址。如果用户从另一台PC连接(该计算机与Web应用程序运行在我PC上的同一网络下)并使用IP地址192.168.10.120:8080/WebApplication
,那么代码request.getRemoteAddr()
或request.getLocalAddr()
将返回他的IP地址。当我从运行Web应用程序的PC登录时,我得到的IP地址是0:0:0:0:0:0:0:1。
为什么会这样?这些命令有什么区别(应该使用哪个)?非常感谢!
0:0:0:0:0:0:0:1
,而不是127.0.0.1
,这就是您看到此地址的原因。getRemoteAddr()
返回客户端的IP。
- getLocalAddr()
返回应用程序正在运行的服务器的IP。getRemoteAddr
。getRemoteAddr() 可以解决您的问题,但如果客户端在代理后面,则会得到代理服务器的IP地址:
返回发送请求的客户端或最后一个代理的Internet协议(IP)地址。
getLocalAddr() 返回应用程序正在运行的服务器的IP地址。
String ip = "unknown";
try{
ip = request.getRemoteAddr();
if(ip.equals("0:0:0:0:0:0:0:1") || ip.equals("127.0.0.1")) {
InetAddress hostAddress = InetAddress.getLocalHost();
ip = hostAddress.getHostAddress();
}
} catch (UnknownHostException e) {
log.info("got unknown host");
ip = "unknown";
}
getLocalAddr()
获取接收请求的机器的IP地址。来源。相反,getRemoteAddr()
获取请求资源的机器的IP地址。来源。 - Michael Wiggins