2012-09-13 115 views
0

我应该捕获客户端机器的IP地址,他们打我的web应用程序。 谷歌搜索后,我发现有两种方式:使用java获取客户端机器的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的方法。

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

回答

1

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

+0

Heyy ..谢谢你的时间。 我已编辑的问题..请帮助 –

1

问题是没有办法保证它。客户端可能是NAT,所以无论如何您都无法找到客户端知道的地址,并且如果客户端通过代理连接(通用于某些设备类别,或者连接来自一些地点),那么无法保证代理会告诉你客户的地址是什么。那里有一些可怕的破解代理,即使正常工作,它们仍可能被配置为隐藏您正在查找的信息。

最简单的技术可能是在客户端上运行一些JavaScript来发现信息并在后台请求中发送给您。但是,你会发现客户的地址往往不是非常有用。您当然不能将其用于身份验证目的(NAT的广泛流行和通过DHCP进行动态地址分配意味着您通常会获得具有相同“内部”地址的不同客户端)或连接回客户端(大多数客户端运行强大的防火墙或支持一个),我不知道为什么你甚至想要记录它。这是关于你可以要求的最无用的东西。我建议退一步从这个问题,并再次想想你真的试图做。