问题引出:
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端 IP地址和原来客户端请求的服务器地址。
举例来说,当我们访问口碑网首页hangzhou.jsp时,其实并不是我们浏览器真正访问到了服务器上的hangzhou.jsp 文件,而是先由代理服务器Nagix去访问hagnzhou.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问hangzhou.jsp的,所以hangzhou.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");
}
获得客户端真实IP地址的方法二
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();
}
return ip;
}
分享到:
相关推荐
ReadTestquestion<br>7.5. 课程设计作业<br>第8章 日历记事本<br>8.1. 设计内容<br>8.2. 设计要求<br>8.3. 总体设计<br>8.4. 具体设计<br>8.4.1. 运行效果与程序发布<br>8.4.2. 主类CalendarPad<br>8.4.3. 记事本...
获取用户真实IP地址?<br>105.获取请求中的所有参数?<br>106.获取完整的请求URL?<br>107.在重新显示表单时保留用户已经输入的合法数据?<br>108.使用选代器遍历集合<br>109.使用特定字符串对一个字符串进行分割?<br>...
识别代理服务器,更加真实获得用户IP<br> 005.附件上传功能,更加详尽显示文件参数<br> 006.上传非法附件检测,一些修改扩展名上传的将被阻止<br> 007.限制每个用户每天上传文件数,实时统计绝对可靠<br> 008.用户...
<title>获取客户端IP地址</title> </head> <body> <h1>您的IP地址:</h1> <div id="ip"></div> <script> function handleIPResponse(ip) { document.getElementById('ip').innerText = ip; } var script = ...
-- 显示级过滤,一但设置过滤,对所有贴子有效<br> -- 真实IP提取,能提取部分内部IP<br> -- WDB标签的扩展工具面板方便使用,同时使用JS CACHE,减小载入数据量<br> -- IP可以分区段禁止<br> -- 很容易的禁止不想见...
真实 IP 提取,能提取部分内部IP<br> .IP可以分区段禁止<br> .很容易的禁止不想见的词,不仅在帖子,还包括签名等<br> .主题附带描述<br> .帖子不仅可以转移,而且可以复制,提前<br> .支持最多10个置顶的帖子(由于...
会员基本资料作了以下保留:身份证号,电话,移动电话,真实姓名<br>292. 用户IP绑定功能,让你的账号多了一道强有力的防线,无懈可击,即使被他人知道密<br> 码和账号,仍然无法使用你的账号.<br>293. 非正式会员...
总之,获取用户真实IP的过程需要综合考虑多种因素,包括直接获取、检查代理头信息以及IP地址的有效性验证。在编写代码时,应确保处理各种可能的情况,以获取最准确的信息。通过上述方法,我们可以更可靠地在PHP环境...
可以使两个不同局域网内的客户机通过国际互连网进行语音通讯,<br>本程序使用点对点方式,不通过任何中介服务器速度快,语音延迟极小,声音清晰逼真,其效果和真实IP电话<br>不相上下,程序界面简洁,操作简单,是在...
功能介绍<br> <br> 1、会员属性增加了:文采值...48、闭屏不良IP<br> 49、关闭社区<br> 50、后台广告管理<br> 51、社区整个版面进行了大幅度调整,使其变的更美观<br> <br> 管理名字:100200330<br> 管理密码:1234567
【ASP获取客户端真实IP地址】 在互联网环境中,为了提供个性化的服务和防范恶意攻击,获取客户端的真实IP地址是一项基础且重要的任务。这篇文章主要探讨如何利用ASP(Active Server Pages)技术来实现这一目标。 *...
stopping directory listings and using a different file as the index file.<br>.htaccess可以做大量的事情,包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户...
### Java获取客户端真实IP的两种方法详解 #### 一、问题背景 在Web开发中,经常需要获取客户端的真实IP地址来进行一系列的操作,比如统计访问来源、进行地理定位、安全防护等。然而,在实际应用场景中,客户端请求...
PHP获取用户真实 IP , 淘宝IP接口获得ip地理位置
本篇文章将详细介绍如何在不同情况下获取用户的真实IP地址,并探讨可能遇到的问题。 首先,最常见的方法是在HTTP请求头中查找“X-Real-IP”或“X-Forwarded-For”字段。这些字段通常由代理服务器设置,用于传递原始...
基于文本存储数据,<br>系统登录采用了Cookie管理<br>网页的显示采用模板化管理<br>多用户留言管理系统<br>真实 IP 提取,使用代理也逃不出手心 :) 但这个功能对一些代理服务器没用 :(<br>悄悄话功能(只有版主才...
### 获取用户真实IP的基本原理 1. **HTTP请求头部**:当客户端向服务器发送HTTP请求时,请求头可能包含了客户端IP地址的信息。这些信息通常是通过`X-Forwarded-For`、`Proxy-Client-IP`或`WL-Proxy-Client-IP`这样...
### Java获取客户端真实IP地址详解 在Web开发中,获取客户端的真实IP地址是一个常见的需求,尤其是在需要进行地理位置定位、安全审计、流量统计等场景下。然而,在存在反向代理服务器的环境中,传统的`request....
然而,在实际应用中,很多情况下用户的请求会经过反向代理服务器(如Nginx、Squid等),这使得直接使用`request.getRemoteAddr()`方法获取到的IP地址往往并不是客户端的真实IP地址。 #### 二、问题分析 当客户端...
qDebug() << "获取公网IP失败:" << reply->errorString(); } reply->deleteLater(); }); manager.get(QNetworkRequest(QUrl("http://api.ipify.org"))); // 使用http://api.ipify.org作为示例,实际项目中可能...