我正在尝试在我的 web 应用程序中打印登录用户的 IP 地址。如果用户使用 IP 地址
192.168.10.120:8080/WebApplication
从另一台 PC(位于同一网络下,因为 Web 应用程序在我的电脑中运行)连接,则代码 request.getRemoteAddr()
或 request.getLocalAddr())
返回他的 IP 地址。当我从运行 Web 应用程序的电脑登录时,我得到这个 IP 地址 0:0:0:0:0:0:0:1。 当我们从 IPv4 转向 IPv6 时,他们会将环回地址 (localhost) 从
0:0:0:0:0:0:0:1
更改为 127.0.0.1
,这就是您获得此地址的原因。
功能方面:
getRemoteAddr()
返回客户端IPgetLocalAddr()
返回应用程序所在服务器的IP
运行在您的情况下,当您尝试在本地计算机上访问它时,它将返回该值。但是让您的一位朋友访问它,您将收到预期的结果
getRemoteAddr
来自javadoc:
getRemoteAddr - 返回发送请求的客户端或最后一个代理的 IP 地址
getLocalAddr - 返回接收请求的接口的 IP 地址。
getRemoteAddr()解决了你的目的,但如果客户端位于任何代理后面,那么你将获得代理的IP地址:
返回客户端或最后一个代理的互联网协议(IP)地址 发送请求的。
getLocalAddr() 返回应用程序运行所在服务器的 IP。
如果您想获取 127.0.0.1 而不是 0:0:0:0:0:0:0:1,请使用以下属性 CATALINA_OPTS="$CATALINA_OPTS -Djava.net.preferIPv4Stack=true" 启动应用程序服务器进程
如果使用 java 并且您需要知道客户端 IP 地址或本地计算机的 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";
}