引用下面的文章但是无法获得真实ip, 只好用最笨的方法了,不过很有效,得到了IP,不过得在真实的环境下运行。请参考附件.
<table border=1 cellspacing=0 cellpadding=0 align=center>
<tr><th>Name</th><th>Value</th></tr>
<%
Enumeration enumNames;
String strName, strValue;
enumNames = request.getHeaderNames();
while (enumNames.hasMoreElements()) {
strName = (String) enumNames.nextElement();
strValue = request.getHeader(strName);
%>
<tr><td><%=strName%></td><td><%=strValue%></td></tr>
<%}%>
</table>
[引用] http://www.diyjava.com/j2ee/ShowArticle.asp?ArticleID=3413
JSP获取真实IP地址
作者:佚名 文章来源:不详 点击数:180 更新时间:2009-04-23
在jsp里,获取客户端的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");
}
获得客户端真实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;
}
可是,如果通过了多级反向代理的话,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地址在使用Apache Axis发布Web服务时是一个重要但可能复杂的过程,需要结合使用Servlet API和理解网络架构来正确处理。提供的库文件是实现这一功能的基础,确保了服务与客户端之间的通信和...
在实际的Java代码实现中,可以通过以下步骤获取客户端的真实IP地址: ```java public static String getIpAddr(HttpServletRequest request){ String ip = request.getHeader("X-Forwarded-For"); if(ip == null ...
本主题将详细探讨如何在使用JSP(JavaServer Pages)和Servlet技术时,通过用户的HTTP请求获取并解析IP地址,同时提取浏览器和操作系统的相关信息。 首先,我们需要了解HTTP请求的基本结构。每当用户通过浏览器访问...
但是,如果使用了反向代理软件,如Apache、Squid等,request.getRemoteAddr() 方法获取的IP地址将不是客户端的真实IP地址,而是代理服务器的IP地址。 在反向代理的情况下,客户端的IP地址不能直接获取,而是通过...
57. 获取用户的真实IP地址? 58. 获取用户浏览器信息? 59. 获取当前绝对路径? 60. 将HTML文件转换成XML文件? 61. 结合XML和XSL输出HTML页面? 62. 制作动态树型菜单制作? 63. 制作类似QQ的短消息提示? 64. 用...
86、获取用户的真实IP地址 87、获取用户的浏览器信息 88、在客户端进行数据检查 89、在JSP中获取当前绝对路径 90、读取表单中所有参数 91、分行写入数据 92、显示请求URL 93、判断session是否过期 94、参数式查询...
获取用户的真实IP地址? 58. 获取用户浏览器信息? 59. 获取当前绝对路径? 60. 将HTML文件转换成XML文件? 61. 结合XML和XSL输出HTML页面? 62. 制作动态树型菜单制作? 63. 制作类似QQ的短消息...
为了获取真实的IP地址,可能需要遍历`NetworkInterface`以找到非回环接口的IP地址。 ```java Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); while (netInterfaces....
还可以获取客户端IP地址: ```java String ip = request.getRemoteAddr(); ``` 以及获取当前目录或指定文件的真实路径: ```java String realPath = request.getRealPath("/"); ``` #### 3. response `response`...
14. **getRemoteAddr()**:返回发送此请求的客户端IP地址。 15. **getRemoteHost()**:返回发送此请求的客户端主机名。 16. **setAttribute(String key, Object obj)**:设置属性的属性值。 17. **getRealPath...
| 15 | `String getRemoteAddr()` | 返回发送此请求的客户端IP地址 | | 16 | `String getRemoteHost()` | 返回发送此请求的客户端主机名 | | 17 | `void setAttribute(String key, Object obj)`| 设置指定名称的属性...
3. 获取客户端地址(Client Address):通过request对象的getRemoteAddr()方法,可以获取到发起请求的客户端IP地址。 4. 获取Servlet路径(Servlet Path):getServletPath()方法会返回触发请求的Servlet的路径。...
- `getRemoteAddr()`:获取客户端的IP地址。 - `getRemoteHost()`:获取客户端主机名。 - `setAttribute(String key, Object obj)`:设置属性值。 - `getRealPath(String path)`:获取服务器上的真实路径。 2. ...
- `getRemoteAddr()`: 返回发送此请求的客户端IP地址。 - `getRemoteHost()`: 返回发送此请求的客户端主机名。 - `setAttribute(String key, Object obj)`: 设置属性值。 - `getRealPath(String path)`: 返回...
`request.getRemoteAddr()` 返回发出请求的客户端的IP地址,如果没有反向代理,通常为用户的真实IP。 `request.getRemoteHost()` 返回客户端主机名,基于IP地址解析得到。 3. 服务器信息: `request....
86、获取用户的真实IP地址 87、获取用户的浏览器信息 88、在客户端进行数据检查 89、在JSP中获取当前绝对路径 90、读取表单中所有参数 91、分行写入数据 92、显示请求URL 93、判断session是否过期 94、参数式查询...
- **Java EE 运行流程**:Java EE 应用通常由一系列 Web 组件和服务组成,包括 Servlet、JSP 页面、EJB 等。运行流程主要包括应用程序服务器启动、加载配置文件(如 web.xml)、初始化组件、处理 HTTP 请求等步骤。 ...
- **限制访问频率**:对于同一IP地址频繁请求验证码的行为,可以采取限制措施,避免被恶意破解。 ### 知识点五:综合应用与扩展 #### 5.1 应用场景 验证码常用于登录界面、注册页面等需要验证用户真实身份的场景,...