2010-01-07 140 views
1

我正在编写一个Web应用程序,我需要为应用程序中的所有操作执行审计日志。为此,我需要获取客户端系统的IP地址。如何从http请求获取子网ip地址

我使用request.getRemoteAddr()来获取远程IP地址。但是这有一个问题,如果客户端在代理的后面,这个方法将给出代理系统的IP。

当我做了一些搜索时,我在HttpRequest对象中发现了一个名为'X-FORWARDED-FOR'的头部属性。

有人可以告诉我这个头属性的工作原理以及如何使用此头来获取客户端系统的IP地址。

谢谢

回答

5

getRemoteIP返回用户的远程IP地址(假设所有的HTTP中介对XFF标题都表现良好)。

String getRemoteIP(HttpServletRequest request) { 
    String xff = request.getHeader("X-Forwarded-For"); 
    if (xff != null) { 
     return xff.split("[\\s,]+")[0]; 
    } 
    return request.getRemoteAddr(); 
} 
2

客户端的代理 - 通常是通过防火墙或诸如此类 - 将填充它从客户端,这是典型的接收IP的X转发换头,但不要求(以用户通过多个代理或防火墙的情况)用户机器的IP。

2

'X-FORWARDED-FOR'用于识别通过HTTP代理连接到Web服务器的客户端的始发/实际IP地址。

您可以简单地使用该属性的值来找出始发客户端IP,即使它位于代理之后。