如何从http请求获取子网IP地址

时间:2010-01-07 03:55:18

标签: java

我正在编写Web应用程序,我需要为应用程序中的所有操作执行审核日志。为此,我需要获取客户端系统的IP地址。

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

当我进行一些搜索时,我在HttpRequest对象中找到了一个名为'X-FORWARDED-FOR'的头属性。

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

谢谢

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:2)

客户端的代理 - 通常是防火墙或某些 - 将使用从客户端接收的ip填充x-forwarded-for标头,这通常是,但不是必须的(在用户通过的情况下)多个代理或防火墙)用户机器的IP。

答案 2 :(得分:2)

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

您可以简单地使用此属性的值来查找原始客户端IP,即使它位于代理服务器后面。