java中如何获取ip地址,同时防止x-forwarded-for伪造ip,以及DNS欺骗,这段代码应该怎么写,求各路大神解答

解决方案 »

  1.   

    public String getIpAddr(HttpServletRequest request) {
     // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
    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;
    }
      

  2.   

    我开始也是这么写的,可是ip还是能通过x-forwarded-for进行伪造
      

  3.   

    要看你的服务是怎么部署,前端是否有负载均衡或反向代理。自己做的反向代理,x-forwarded-for才有用没有httpServletRequest.getRemoteHost()就可以,有的话,参考这篇文章吧
    http://blog.csdn.net/xiao__gui/article/details/73733797