/**
* 取得客户端IP地址
*
* 假如通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串ip值, 究竟哪个才是真正的用户端的真实IP?
* 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 如:X-Forwarded-
* For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100, 用户真实IP为:
* 192.168.1.110
*
* @param request
* @return String
* @author huohezhang
* @time 2010-9-21
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
log.debug("Get ip address from header 'X-Forwarded-For' is :"+ip);
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
log.debug("Get ip address from header 'Proxy-Client-IP' is :"+ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
log.debug("Get ip address from header 'WL-Proxy-Client-IP' is :"+ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
log.debug("Get ip address from header 'HTTP_CLIENT_IP' is :"+ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
log.debug("Get ip address from header 'HTTP_X_FORWARDED_FOR' is :"+ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
log.debug("Get ip address from RemoteAddr() is :"+ip);
}
if(ip!=null){
if(ip.contains(",")){
ip = ip.substring(0,ip.indexOf(","));
}
if(ip.length()>23){
ip = ip.substring(0,23);
}
}
log.debug("Get ip address is :"+ip);
return ip;
}
分享到:
相关推荐
### 非request方式获取IP地址 #### 1. 方法概述 本示例中的`getIp()`方法采用Java标准库中的`java.net.InetAddress`类来获取本地主机的IP地址。这种方法避免了使用HTTP请求或套接字连接所带来的复杂性,提供了一种...
IpUtil工具类--通过request获取IP,通过IP获取地址(需要联网,调用淘宝的IP库)。使用场景:在网站开发记录用户增删改查日志的时候,往往需要记录操作人的IP地址,来准确的生成操作日志记录等
在IT行业中,尤其是在Web开发领域,获取客户端的IP地址是一项常见的任务。这有助于跟踪用户行为、提供地域针对性的服务,甚至进行安全防护。本篇文章将详细解释如何在Java环境下,通过Servlet和Reactive编程模型来...
获取用户请求IP地址 根据IP地址获取mac地址
在Java Web开发中,有时我们需要获取客户端的IP地址甚至是MAC地址,以便进行安全验证、用户行为追踪等操作。本文将详细介绍如何通过Java来实现这一功能。 #### 一、获取客户端 IP 地址 获取客户端的IP地址通常在...
然而,在实际应用场景中,客户端请求往往经过了多级代理(如Apache、Squid等),这使得直接使用`request.getRemoteAddr()`方法获取到的IP地址并不是客户端的真实IP,而是代理服务器的IP地址。 例如,在使用Apache或...
在Java编程中,获取IP地址是一项常见的任务,特别是在网络编程和服务器开发中。这个"java IP地址工具类"是为了解决这个问题而设计的。它提供了便捷的方法来获取和处理IP地址,尤其对于获取客户端IP地址在Web应用中至...
然而,在使用如Apache、Squid等反向代理服务器的情况下,直接使用`request.getRemoteAddr()`获取到的往往是代理服务器自身的IP地址,而不是客户端的真实IP地址。 #### 获取客户端真实IP的基本原理 在不使用反向...
排查时,应当关注DHCP Discover、Offer、Request、Acknowledge这四个主要报文交换步骤,任何一个步骤出现问题都可能导致IP地址获取失败。 4. 设备配置DHCP服务器场景下的故障定位:检查DHCP服务器配置是否正确,...
在Servlet中,我们通常通过`HttpServletRequest`对象来获取请求的相关信息,包括IP地址。以下是如何在IntelliJ IDEA中使用Java和Servlet来获取用户IP的方法: 1. **配置Servlet**:首先,在IntelliJ IDEA中创建一个...
在故障描述中,我们可以看到,LG P350 手机在连接 Wi-Fi 网络时,总是停留在“正在从 [SSID 名称] 获取 IP 地址”,然后获取失败,自动断开。通过反编译和调试,我们发现了 DHCP 获取 IP 时的权限问题。 通过检查 ...
此时,正确的做法是从这一串IP地址中选取第一个非`unknown`的有效IP作为客户端的真实IP。这可以避免获取到的是内部网络中其他代理服务器的IP,而确保获取到的是最前端的客户端IP。 以下是一个改进后的Java方法,...
需要注意的是,`X-Forwarded-For`头部可能存在被篡改的风险,因此在某些安全敏感的应用场景中,直接依赖这个头部获取IP可能不够安全。此外,不同的反向代理服务器可能有特定的配置,如Squid的`forwarded_for`选项,...
在.NET框架中,获取客户端的主机名和IP地址是一项常见的需求,尤其是在Web应用程序开发中。这通常用于跟踪用户活动、安全验证或者网络诊断等场景。本文将详细介绍几种在.NET环境中获取客户端主机名和IP地址的方法。 ...
本文将深入探讨如何在Request中获取相关网络信息,包括客户端的IP地址、浏览器类型以及操作系统详情。 首先,我们需要了解HTTP请求的基本结构。一个HTTP请求通常由请求行、请求头和请求体三部分组成。其中,请求头...
3. **DHCP Request**:客户端从接收到的Offer消息中选择一个服务器,并向该服务器发送Request消息,请求提供IP地址等信息。 4. **DHCP Acknowledge**:服务器确认客户端的请求,并发送Acknowledge消息,其中包含了...
在Controller类获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用...
Java根据Request获取客户端IP是指在Java Web开发中获取客户端的IP地址,以便进行相应的处理和分析。在JSP中,获取客户端IP地址的方法是使用request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是,如果...
JSP是Java的一种动态网页技术,可以通过内置的`<%= request.getRemoteAddr() %>`表达式来获取客户端的IP地址。然而,由于没有提供具体的文件内容,我们无法给出详细的代码分析。 总之,获取IP地址是网络编程的基础...
java获取IP地址和MAC地址。 /** * 通过HttpServletRequest返回IP地址 * @param request HttpServletRequest * @return ip String * @throws Exception */ public String getIpAddr(HttpServletRequest ...