【问题标题】:Obtaining ip address of client machine using java使用java获取客户端机器的IP地址
【发布时间】:2012-09-13 04:34:07
【问题描述】:

我应该捕获访问我的 Web 应用程序的客户端计算机的 IP 地址。 谷歌搜索后,我找到了两种方法:

  1. request.getRemoteAddr()

  2. request.getHeader("X-FORWARDED-FOR")

但它们都不能保证返回客户端机器的实际 ip。 另外,我应该使用 struts1.2 来实现相同的效果,因为应用程序是在 struts1.2 中开发的。

有没有相同的struts类?

我正在使用以下代码:

String ipAddress = request.getHeader("X-FORWARDED-FOR");  
if (ipAddress == null) {  
    ipAddress = request.getRemoteAddr();  
}

但当我从移动或无线设备访问应用程序时,request.getHeader("X-FORWARDED-FOR"); 方法返回 null

结果ip是从方法request.getRemoteAddr();获取的 问题是检索到的 ip 是私有的,不公开 但我想要客户端的公共 ip

【问题讨论】:

    标签: java web-applications ip-address struts-1


    【解决方案1】:

    问题是没有办法保证它。客户端可能是 NAT-ted,因此无论如何您都无法找到客户端知道的地址,并且如果客户端通过代理连接(对于某些类别的设备很常见,或者当连接来自某些位置)然后无法保证代理会告诉您客户端的地址是什么。那里有一些严重损坏的代理,即使工作正常,它们仍可能被配置为隐藏您要查找的信息。

    最简单的技术可能是在客户端上运行一些 javascript 来发现信息并在后台请求中将其发送给您。但是随后您会发现客户的地址通常不是很有用。您肯定不能将其用于身份验证目的(NAT 和通过 DHCP 进行动态地址分配的广泛流行意味着您经常会获得具有相同“内部”地址的不同客户端)或连接回客户端(大多数客户端运行强大的防火墙或位于防火墙后面),我不知道您为什么要记录它。这是你能要求的最没用的东西。我建议您从这个问题中退后一步,重新考虑一下您真正想要做什么。

    【讨论】:

      【解决方案2】:

      request.getRemoteAddr() 在大多数情况下会返回正确的地址(这是 Java EE 而非 struts 的一部分)。他们不保证返回客户端机器的实际 IP,因为这是 TCP/IP 限制的问题,而不是结构或 Java 本身。

      【讨论】:

      • 嘿.. 谢谢你的时间。我已经编辑了问题..请帮助
      猜你喜欢
      • 2011-07-22
      • 1970-01-01
      • 2019-01-14
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 2013-07-07
      相关资源
      最近更新 更多