在java中获取错误的ip地址

时间:2016-03-07 12:24:26

标签: java tomcat servlets networking server

我正在从我的机器向服务器发送请求。我的机器的IP地址是192.168.1.217

在服务器端,我正在打印客户端IP地址,但是当我使用request.getRemoteAddr()打印IP地址时,我将其作为192.168.0.5

当我使用request.getHeader("X-FORWARDED-FOR")打印IP地址时,我将其设为null

我正在使用apache tomcat服务器。

2 个答案:

答案 0 :(得分:3)

如果该IP地址(192.168.0.5)是(或)防火墙,则它是正确的IP地址。您的服务器端代码报告它看到的“客户端”IP地址,并且它无法做得更好。

一般来说,对于发生的事情有几种可能的解释:

  • 防火墙可能正在运行HTTP代理,您的客户端计算机可以配置为通过代理发送所有HTTP请求。如果客户端能够直接与服务器通信,那么您可以修改客户端的代理设置以将服务器视为例外。

  • 防火墙可能正在提供NAT服务,将您网络的一部分与另一部分隔离(例如)。如果这是问题,那么您将需要网络管理员的帮助。

  • 在(例如)端口8080上运行Tomcat服务器并将其放在端口80上的反向代理服务器上是常见的(通常是“良好实践”)。

在您的情况下,最有可能是第一种解释。

@andrucz建议使用Tomcat远程IP过滤器。这在某些情况下会起作用,但不是全部,并且它使用的信息很容易被“欺骗”

最重要的是,网络服务器通常无法查看客户端的真实IP地址。因此,建议您在依赖上实现服务是不可取的。

答案 1 :(得分:0)

您可以使用Tomcat远程IP过滤器:http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_IP_Filter

也许你需要网络管理员'帮助配置防火墙以包含" X-Forwarded-For"报头中。