`
xuechenyoyo
  • 浏览: 56811 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[引用] JSP,Servlet获取真实IP地址

阅读更多
引用下面的文章但是无法获得真实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

  • test.zip (871 Bytes)
  • 下载次数: 124
分享到:
评论

相关推荐

    获取客户端IP地址所需Jar包

    总结来说,获取客户端IP地址在使用Apache Axis发布Web服务时是一个重要但可能复杂的过程,需要结合使用Servlet API和理解网络架构来正确处理。提供的库文件是实现这一功能的基础,确保了服务与客户端之间的通信和...

    jsp获取客户端IP地址的方法

    在实际的Java代码实现中,可以通过以下步骤获取客户端的真实IP地址: ```java public static String getIpAddr(HttpServletRequest request){ String ip = request.getHeader("X-Forwarded-For"); if(ip == null ...

    解析ip,用户给一个请求,获取用户的ip,浏览器,操作系统等信息

    本主题将详细探讨如何在使用JSP(JavaServer Pages)和Servlet技术时,通过用户的HTTP请求获取并解析IP地址,同时提取浏览器和操作系统的相关信息。 首先,我们需要了解HTTP请求的基本结构。每当用户通过浏览器访问...

    Java根据Request获取客户端IP

    但是,如果使用了反向代理软件,如Apache、Squid等,request.getRemoteAddr() 方法获取的IP地址将不是客户端的真实IP地址,而是代理服务器的IP地址。 在反向代理的情况下,客户端的IP地址不能直接获取,而是通过...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    57. 获取用户的真实IP地址? 58. 获取用户浏览器信息? 59. 获取当前绝对路径? 60. 将HTML文件转换成XML文件? 61. 结合XML和XSL输出HTML页面? 62. 制作动态树型菜单制作? 63. 制作类似QQ的短消息提示? 64. 用...

    JSP实例编程100例

    86、获取用户的真实IP地址 87、获取用户的浏览器信息 88、在客户端进行数据检查 89、在JSP中获取当前绝对路径 90、读取表单中所有参数 91、分行写入数据 92、显示请求URL 93、判断session是否过期 94、参数式查询...

    jsp编程技巧集锦

    获取用户的真实IP地址? 58. 获取用户浏览器信息? 59. 获取当前绝对路径? 60. 将HTML文件转换成XML文件? 61. 结合XML和XSL输出HTML页面? 62. 制作动态树型菜单制作? 63. 制作类似QQ的短消息...

    Java获取服务器IP及端口的方法实例分析

    为了获取真实的IP地址,可能需要遍历`NetworkInterface`以找到非回环接口的IP地址。 ```java Enumeration&lt;NetworkInterface&gt; netInterfaces = NetworkInterface.getNetworkInterfaces(); while (netInterfaces....

    JavaEE基础JSP的9个内置对象

    还可以获取客户端IP地址: ```java String ip = request.getRemoteAddr(); ``` 以及获取当前目录或指定文件的真实路径: ```java String realPath = request.getRealPath("/"); ``` #### 3. response `response`...

    jsp内置对象解析

    14. **getRemoteAddr()**:返回发送此请求的客户端IP地址。 15. **getRemoteHost()**:返回发送此请求的客户端主机名。 16. **setAttribute(String key, Object obj)**:设置属性的属性值。 17. **getRealPath...

    JSP九大内置对象详解

    | 15 | `String getRemoteAddr()` | 返回发送此请求的客户端IP地址 | | 16 | `String getRemoteHost()` | 返回发送此请求的客户端主机名 | | 17 | `void setAttribute(String key, Object obj)`| 设置指定名称的属性...

    jsp Request获取url信息的各种方法对比

    3. 获取客户端地址(Client Address):通过request对象的getRemoteAddr()方法,可以获取到发起请求的客户端IP地址。 4. 获取Servlet路径(Servlet Path):getServletPath()方法会返回触发请求的Servlet的路径。...

    jsp九大内置对象是什么

    - `getRemoteAddr()`:获取客户端的IP地址。 - `getRemoteHost()`:获取客户端主机名。 - `setAttribute(String key, Object obj)`:设置属性值。 - `getRealPath(String path)`:获取服务器上的真实路径。 2. ...

    jsp内置对象的用法

    - `getRemoteAddr()`: 返回发送此请求的客户端IP地址。 - `getRemoteHost()`: 返回发送此请求的客户端主机名。 - `setAttribute(String key, Object obj)`: 设置属性值。 - `getRealPath(String path)`: 返回...

    JSP request(return String)用法详例

    `request.getRemoteAddr()` 返回发出请求的客户端的IP地址,如果没有反向代理,通常为用户的真实IP。 `request.getRemoteHost()` 返回客户端主机名,基于IP地址解析得到。 3. 服务器信息: `request....

    JAP编程学习100例

    86、获取用户的真实IP地址 87、获取用户的浏览器信息 88、在客户端进行数据检查 89、在JSP中获取当前绝对路径 90、读取表单中所有参数 91、分行写入数据 92、显示请求URL 93、判断session是否过期 94、参数式查询...

    java EE复习重点

    - **Java EE 运行流程**:Java EE 应用通常由一系列 Web 组件和服务组成,包括 Servlet、JSP 页面、EJB 等。运行流程主要包括应用程序服务器启动、加载配置文件(如 web.xml)、初始化组件、处理 HTTP 请求等步骤。 ...

    点击图片更换验证码的代码

    - **限制访问频率**:对于同一IP地址频繁请求验证码的行为,可以采取限制措施,避免被恶意破解。 ### 知识点五:综合应用与扩展 #### 5.1 应用场景 验证码常用于登录界面、注册页面等需要验证用户真实身份的场景,...

Global site tag (gtag.js) - Google Analytics