在java中获取错误的ip地址

在java中获取错误的ip地址,java,tomcat,servlets,networking,server,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服务器。您可以使用tomcat远程IP筛选器: 也许您需要网络管理员的帮助来配置防火墙以包含“X-Forwarded-

我正在将请求从我的计算机发送到服务器。我的机器的Ip地址是
192.168.1.217

在服务器端,我正在打印客户端Ip地址,但当我使用
request.getRemoteAddr()
打印Ip地址时,我得到的是
192.168.0.5

当我使用
request.getHeader(“X-FORWARDED-FOR”)
打印Ip地址时,我得到的是
null


我正在使用apache tomcat服务器。

您可以使用tomcat远程IP筛选器:

也许您需要网络管理员的帮助来配置防火墙以包含“X-Forwarded-For”头。

如果该IP地址(
192.168.0.5
)是(或a)防火墙,则它是正确的IP地址。您的服务器端代码正在报告它所看到的“客户端”IP地址,这是再好不过的了

总的来说,对于正在发生的事情,有几种可能的解释:

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

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

  • 在(比如)端口8080上运行Tomcat服务器,并将其置于端口80上的反向代理之后,这是常见的(而且通常是“良好实践”)

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


@andrucz建议使用Tomcat远程IP过滤器。这在某些情况下有效,但并非所有情况下都有效,而且它使用的信息很容易被“欺骗”


底线是Web服务器通常无法看到客户端的真实IP地址。因此,不建议依赖此来实现您的服务。

您是否在服务器端配置了代理/防火墙?您网络中的哪台机器的地址为192.168.0.5?这些信息可能会有帮助。我和网络人员询问过这台机器,他们告诉我这是防火墙。我对防火墙一无所知。请帮忙。防火墙是什么机器<代码>192.168.0.5?192.168.0.5机器是防火墙。