【问题标题】:How to get ip from request in java?如何从java中的请求中获取ip?
【发布时间】:2014-12-17 09:45:24
【问题描述】:

我已经在服务器上上传了我的代码。

我正在使用:

 String ipAddress1 = FrameworkUtil.getServletRequest().getHeader("Remote_Addr");
 System.out.println("Remote_Addr ipAddress===>"+ipAddress1);

 String ipAddress = FrameworkUtil.getServletRequest().getHeader("HTTP_X_FORWARDED_FOR");
 System.out.println("HTTP_X_FORWARDED_FOR ipAddress==>"+ipAddress);

  if (ipAddress == null) {
        ipAddress = FrameworkUtil.getServletRequest().getRemoteAddr();
        System.out.println(" getRemoteAddr ipAddress=>"+ipAddress);
    }

我得到:

 Remote_Addr ipAddress===>null
 HTTP_X_FORWARDED_FOR ipAddress==>null
 getRemoteAddr ipAddress=>127.0.0.1

但是在 google myip 中给我:233.233.22.331

我应该怎么做才能在 java 中获取它?

【问题讨论】:

  • 127.0.0.1 表示您的服务器正在本地主机上运行
  • @JonnyHenly 但我应该怎么做才能获得请求 IP ?即请求来自哪个IP。
  • 对所有 X-Forwarded-For-Posts 的补充:这些标题属性可以由代理设置,但这不是强制性的。代理的行为可以通过更改协议来改变,因此 HTTP 协议将列出连接到代理的客户端的 IP,但如果是 HTTPS,则不会列出。根据您要完成的任务,我不建议您的应用程序依赖于 X-Forwarded-For 标头。

标签: java request ip httprequest


【解决方案1】:

如果您想从请求中获取 IP,以下内容应该对您有所帮助:

    String ip = null;

    if (request.getHeader("X-Forwarded-For") != null) {
        String xForwardedFor = request.getHeader("X-Forwarded-For");
        if (xForwardedFor.indexOf(",") != -1) {
            ip = xForwardedFor.substring(xForwardedFor.lastIndexOf(",") + 2);
        } else {
            ip = xForwardedFor;
        }
    } else {
        ip = request.getRemoteAddr();
    }

    System.out.println("Request from IP : "+ip);

【讨论】:

    【解决方案2】:

    试试这个。它会返回你的 LAN IP(ServerIP)

            InetAddress ip = InetAddress.getLocalHost();
            System.out.println("Current IP address : " + ip.getHostAddress());
    

    适用于 java web 应用程序。如果您想要访问者的 IP

    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    String ipAddress = request.getHeader("X-FORWARDED-FOR");
    if (ipAddress == null) {
        ipAddress = request.getRemoteAddr();
    }
    System.out.println("ipAddress:" + ipAddress);
    

    【讨论】:

      【解决方案3】:

      此代码 sn-p 将为您提供 IP 地址。

      String ipaddress = req.getHeader("X-FORWARDED-FOR");
                  if (ipaddress == null) {
                      ipaddress = req.getRemoteAddr();
                  }
          return ipaddress;
      

      【讨论】:

      • 这并不总是正确的。 x-forwarded-for 标头可能包含 IP 列表。因此此代码可能会返回 IP 列表而不是单个 IP 地址
      猜你喜欢
      • 1970-01-01
      • 2010-10-26
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2017-11-15
      相关资源
      最近更新 更多