获取网页客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
步骤/方法
可得出获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
方法2
public String getIpAddr(HttpServletRequest request) {
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.getRemoteAddr();
}
if(ip != null && ip.indexOf(",") != -1) {
String[] array=StringUtil.getInstance().split(ip, ",");
for(String str: array) {
if(str.indexOf("127.0.0.1") == -1 && str.indexOf("192.168.") == -1) {
return str.trim();
}
}
}
return 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
相关推荐
获取用户的真实IP地址? 58. 获取用户浏览器信息? 59. 获取当前绝对路径? 60. 将HTML文件转换成XML文件? 61. 结合XML和XSL输出HTML页面? 62. 制作动态树型菜单制作? 63. 制作类似QQ的短消息...
3. **数据处理**:通过SQL查询或其他数据分析方法,对收集到的数据进行统计,如访问量、独立访客数、页面浏览量等。 4. **结果展示**:统计结果会以图表、报表等形式展示给管理员,便于分析网站的流量情况。 **三、...
5. **地理定位**:通过IP地址识别访问者的地理位置,分析全球用户分布。 ### 四、系统实现技术 1. **Servlet技术**:虽然JSP主要负责视图层,但后台处理逻辑通常由Servlet完成。Servlet处理请求,更新数据库,并将...
2. `view.jsp.BAK`: 可能是一个视图页面,用于展示特定时间段或特定维度的流量详情,如按日期、IP地址、页面等进行划分。 3. `allview.jsp.BAK`: 根据命名推测,这可能是一个显示所有视图或者全局流量统计的页面,...
8. **地理分布**:通过IP地址解析用户的地理位置,了解全球或特定地区的访问分布。 9. **实时监控**:提供实时的流量数据,帮助管理员快速响应突发情况。 **系统实现架构:** 1. **前端界面**:通常使用HTML、CSS和...
3. **数据库存储**: 数据库用于存储访问记录,包括IP地址、访问时间、访问页面等信息,以便后期分析。 4. **实时统计**: 系统可能采用异步处理或实时更新机制,确保流量数据的及时性。 **关键功能** 1. **访问...
多用户网站统计系统通常需要存储大量的用户访问数据,如IP地址、访问时间、页面停留时间等。JDBC(Java Database Connectivity)是Java平台用于数据库操作的标准API,JSP可以通过JDBC连接到各种关系型数据库,如...
- **网站流量要求.txt**: 可能列出了系统对网站流量数据的收集标准,包括但不限于IP地址、访问时间、浏览页面数量等关键指标。 - **readme.txt**: 通常包含了项目的简要介绍、使用说明或开发者的一些提示信息。 - **...
同时,通过IP地址的变化来识别不同的访问者,实现IP计数。 3. **数据存储**:为了保存统计信息,系统需要一个数据库。可能使用的是关系型数据库如MySQL或非关系型数据库如MongoDB,用来存储每日、每月和每年的访问...
1. 访客统计:记录每个访问者的IP地址、浏览器类型、操作系统、访问时间等信息,以便分析用户行为模式。 2. 页面浏览统计:跟踪用户在网站上的活动,统计各页面的访问量,识别热门页面和低流量区域。 3. 流量来源...
1. 数据收集:通过在服务器端记录用户的请求,捕获每个页面的访问信息,如访问时间、访问者IP地址、访问页面等。 2. 数据存储:将收集到的数据存储在数据库中,常见的选择有MySQL、Oracle或者MongoDB等。 3. 数据...
4. **IP和地理位置信息**:记录访问者的IP地址,并根据IP获取其大概的地理位置信息。 5. **浏览器和设备分析**:统计不同浏览器、操作系统和设备的访问情况,以适应各种用户环境。 6. **异常检测**:监控异常访问...
1. 访客统计:记录每个访客的IP地址、访问时间、浏览页面等信息,提供访问量、独立访客数等基础统计。 2. 页面访问:分析每个页面的访问次数,识别热门页面,帮助优化网站内容布局。 3. 来源分析:追踪用户来自哪些...
2. **数据收集**:通过HTTP日志分析或服务器端的API获取网站访问信息,如IP地址、访问时间、浏览页面等。 3. **数据库设计**:使用SQL建立数据库结构,存储各种流量统计数据,如会话(session)、页面视图(pageview...
2. **数据库设计**:定义了数据库的实体和关系,如用户表(含用户名、密码等字段)、访问记录表(含IP地址、访问时间、访问页面等字段)等,以及表之间的关联。 3. **功能模块**:可能包括用户登录注册、实时流量...
系统应具备记录用户访问信息的能力,包括但不限于访问时间、访问页面、停留时间、来源URL、IP地址等。这些数据可以用于计算网站的PV(页面浏览量)、UV(独立访客数)、跳出率等关键指标。 **5. 数据分析与报告** ...
可能使用了诸如MySQL、Oracle或PostgreSQL这样的关系数据库管理系统,通过建立数据表来存储网站的访问记录,如IP地址、访问时间、浏览页面等信息。SQL查询语句用于提取和分析这些数据,为流量统计提供支持。 三、...
- IP地址、域名系统(DNS)的工作原理。 - IPv4和IPv6的区别,子网掩码和CIDR表示法。 - NAT(网络地址转换)在网络通信中的角色。 通过这些课件,学习者将能全面掌握Java Web开发的基本概念和技术,包括JSP的...