【问题标题】:Same public ip address is returned in java在java中返回相同的公共IP地址
【发布时间】:2019-01-04 13:13:06
【问题描述】:

在我的项目中,我需要找到一台机器的公共 ip 地址。

我已经实现了Finding public ip address using java中提到的使用方法

我的项目中有一个类似“http://182.14.10.5:8080/test/addVendor”的 api url(不是确切的 url),并且已部署在公共 IP 地址为 187.15.161.90 的外部 tomcat 服务器中。

我面临的问题是: 当我尝试从其他设备(例如属于其他网络的移动设备或计算机)加载此 api url 时,每次 URL 命中都会获得相同的 ip 182.14.161.90。

这就是我感到困惑的地方。程序是按照那个写的还是我得到错误的输出。

根据我理解的搜索结果,当我加载特定的api url时,我应该根据连接不同网络的不同机器获得不同的ip地址。

但是我获得了部署我的项目的服务器的相同公共 ip (182.14.161.90)。

任何人都可以澄清它并帮助我解决问题。

任何建议将不胜感激。

谢谢

【问题讨论】:

  • 您是否创建了重写规则。如果您不使用一个,您将始终收到服务器 ip。
  • 我没有找到你@DenisKohl。重写规则意味着......你能解释一下吗?

标签: java ip-address


【解决方案1】:

在我看来,您有一个通过 tomcat 部署的 Java Web 应用程序,并且想要获取用户的 IP 地址。

您在问题Finding public ip address using java 中链接的问题专门用于获取运行 Java 代码的机器的 IP 地址(例如,如果您有桌面应用程序并想要获取机器的 IP该应用程序由于某种原因正在运行)

如果要获取用户的远程IP,就看你的服务器配置了

如果 Tomcat 是您环境中的 ONLY 网络服务器,并且它前面没有任何内容,您可以使用 HttpServletRequest#getRomoteAddr 访问请求的远程 ip,这将为您提供服务器的 IP 地址发起请求的套接字连接。

除非您在 Tomcat 前面有代理服务器,例如 Apache HTTPD 或 Nginx,否则这将非常有效,在这种情况下,您需要配置您的服务器以发送 X-Forwarded-For 标头,并使用HttpServletRequest#getHeader 获取用户的远程IP 例如request.getHeader("X-Forwarded-For")

如果我误解了您的问题,请澄清并在评论中告诉我。

【讨论】:

  • 如你所说,我可以从 httpservletrequest 获取远程地址。但我想要的是,我需要获取加载了我的 api url 的设备的公共 ip.. 即:例如,如果你从你的桌面或移动设备加载 182.14.10.5:8080/test/addVendor 这个 url 对应设备的公共 ip 地址应该返回.但我正在获取部署我的项目的服务器(182.14.10.5)的公共 IP。
  • 那么本意是test/addVendor是为了获取请求它的用户的远程IP?
  • 是的@zack6849,我想获取加载url的对应机器的公共IP地址。但相反,我获得了为所有 url 命中部署我的“test/addVendor”的服务器的相同公共 IP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 2017-12-14
  • 2019-11-01
  • 2016-04-24
  • 1970-01-01
相关资源
最近更新 更多