我应该捕获客户端计算机的IP地址,他会点击我的网络应用程序。 谷歌搜索后,我发现了两种方式:
request.getRemoteAddr()
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 。
答案 0 :(得分:1)
request.getRemoteAddr()
将返回正确的地址(这是Java EE的一部分而不是struts)。它们不保证返回客户端计算机的实际IP,因为这是TCP / IP限制的问题,而不是结构或Java本身。
答案 1 :(得分:1)
问题在于没有办法保证它。客户端可能是NAT-ted,因此无论如何您将无法找到客户端知道的地址,以及客户端是否通过代理连接(对于某些类别的设备是常见的,或者当连接来自某些地方)然后没有办法保证代理会告诉你客户的地址是什么。那里有一些可怕的破坏代理,即使工作正常,它们仍然可能被配置为隐藏您正在寻找的信息。
最简单的技术可能是在客户端上运行一些javascript以发现信息并在后台请求中将其发送给您。但是你会发现客户的地址通常不是很有用。您肯定无法将其用于身份验证(通过DHCP广泛流行的NAT和动态地址分配意味着您通常会使用相同的“内部”地址获得不同的客户端)或连接回客户端(大多数客户端运行强大的防火墙或落后于一个)我不知道为什么你甚至想要记录它。这是你可以要求的最无用的东西。我建议退一步解决这个问题,然后再考虑一下你 尝试做什么。