我正在从我的机器向服务器发送请求。我的机器的IP地址是192.168.1.217
。
在服务器端,我正在打印客户端IP地址,但是当我使用request.getRemoteAddr()
打印IP地址时,我将其作为192.168.0.5
。
当我使用request.getHeader("X-FORWARDED-FOR")
打印IP地址时,我将其设为null
。
我正在使用apache tomcat服务器。
答案 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"报头中。