如何在JSP代码中获取所请求站点的IP地址?

时间:2012-06-08 11:29:16

标签: java java-ee networking network-programming

我的任务是确定客户端和Web服务器之间是否存在NAT。 我正在使用这个算法:

  1. 用户请求网页
  2. JSP代码运行并获取所请求站点的IP
  3. JSP代码获取服务器的内部IP
  4. 我比较两个IP,如果它们是相同的 - 它意味着没有NAT
  5. 我的问题是:如何在JSP代码中获取所请求站点的IP地址? 我尝试使用 request.getRequestURL(),但它返回了domen的网站名称。 此外,我尝试获取请求的标题主机,但它既不起作用也不起作用。 此外,我有没有DNS服务的特定服务器,这就是为什么我无法获得DNS名称的IP。

    或者任何想法如何确定客户端和服务器之间是否存在NAT?

2 个答案:

答案 0 :(得分:2)

尝试HttpServletRequest.getRemoteAddr()

描述说:

  

返回发送请求的客户端或最后一个代理的Internet协议(IP)地址。对于HTTP servlet,与CGI变量REMOTE_ADDR的值相同。

注意:这只会获取(或尝试)客户端IP地址。不是客户要求的服务器。

答案 1 :(得分:0)

JSP代码不能,因为它在服务器上运行。

我认为你实际上是指JSP创建的页面中的Javascript代码,但我认为不允许不受信任的Javascript找出浏览器的IP地址或主机名。

(有一个技巧用于在javascript中为客户端获取 IP地址,但它涉及向远程服务器发送请求...在您的情况下,远程服务器可以只提供NAT地址。另一个技巧是运行Java applet,但我怀疑这也会遇到沙箱限制......除非用户的浏览器信任applet。)

简而言之,我不认为服务器通常可以查明客户端的IP地址是否为NAT。


请注意,如果您确实找到了NAT地址背后的真实IP地址,那么它可能对您没有任何用处。可能是IP地址不可路由(因为它位于私有范围内和/或防火墙后面),并且在任何公共DNS服务器中都没有名称。