【问题标题】:How to get the subnet ip adress from http request如何从http请求中获取子网ip地址
【发布时间】:2010-01-07 03:55:18
【问题描述】:

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

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

当我进行一些搜索时,我在 HttpRequest 对象中发现了一个名为“X-FORWARDED-FOR”的标头属性。

谁能告诉我这个标头属性是如何工作的,我如何使用这个标头来获取客户端系统的 IP 地址。

谢谢

【问题讨论】:

    标签: java


    【解决方案1】:

    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-forwarded-for 标头,这通常是但不是必需的(在用户通过的情况下)多个代理或防火墙)用户机器的 ip。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2014-04-24
          • 2011-07-31
          • 1970-01-01
          • 2020-12-28
          • 2018-11-24
          • 1970-01-01
          • 2011-03-19
          • 2010-10-26
          相关资源
          最近更新 更多