在JSP中获取客户端的IP地址

我需要在JSP页面中获取客户端的IP地址。 我尝试了以下方法:

request.getRemoteAddr() request.getHeader("X_FORWARDED_FOR") request.getHeader("HTTP_CLIENT_IP") request.getHeader("WL-Proxy-Client-IP") request.getHeader("Proxy-Client-IP") request.getHeader("REMOTE_ADDR") 

但是,这些方法都没有返回所需的IP地址。 如何在JSP页面中获取客户端的IP地址?

要获取客户端的IP地址,我使用了以下方法

 <% String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } %> 

希望这有帮助,请留下反馈。

 <% out.print( request.getRemoteAddr() ); out.print( request.getRemoteHost() ); %> 

如果客户端在代理后面,您可能无法获得真正的客户端IP,您将获得代理的IP而不是客户端。 但是,代理可以在特殊的HTTP头中包括请求客户端IP。

 <% out.print( request.getHeader("x-forwarded-for") ); %> 

您的应用程序服务器是否位于负载平衡器,代理或Web服务器之后? 只是一个例子; F5负载均衡器使用“rlnclientipaddr”标头公开客户端IP地址:

 request.getHeader("rlnclientipaddr"); 

你使用像apache代理的反向代理吗? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

当以反向代理模式运行时(例如,使用ProxyPass指令),mod_proxy_http添加了几个请求标头,以便将信息传递给源服务器。 这些标题是:

 X-Forwarded-For The IP address of the client. X-Forwarded-Host The original host requested by the client in the Host HTTP request header. X-Forwarded-Server The hostname of the proxy server.