【问题标题】:Getting wrong ip address in java [duplicate]在java中获取错误的IP地址[重复]
【发布时间】:2016-06-21 00:01:28
【问题描述】:

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

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

当我用request.getHeader("X-FORWARDED-FOR") 打印IP 地址时,我得到的是null

我正在使用 apache tomcat 服务器。

【问题讨论】:

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

标签: java tomcat servlets networking server


【解决方案1】:

如果该 IP 地址 (192.168.0.5) 是(或一个)防火墙,那么它就是正确的 IP 地址。您的服务器端代码正在报告它看到的“客户端”IP 地址,而且它不能做得更好。

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

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

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

  • 在(例如)端口 8080 上运行 Tomcat 服务器是很常见的(并且通常是“良好做法”),并将其置于端口 80 上的反向代理之后。

在你的情况下,第一个解释最有可能。


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

最重要的是,网络服务器通常无法看到客户端的真实 IP 地址。所以不建议实现你的服务来依赖这个。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-04
      • 2013-08-19
      • 2014-02-23
      • 2013-02-08
      • 2011-03-14
      • 1970-01-01
      • 2013-08-04
      • 2015-02-23
      • 2020-12-19
      相关资源
      最近更新 更多