Java获取访问者真实的IP地址

个人收录的一些小工具类,供大家参考

方式一

import javax.servlet.http.HttpServletRequest;
/**
自定义访问对象工具类

获取对象的IP地址等信息
@author

*/
public class CusAccessObjectUtil {
/** 
 * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址, 
* 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢? 
 * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 
 *  
 * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 
 * 192.168.1.100 
 *  
 * 用户真实IP为: 192.168.1.110 
 *  
 * @param request 
 * @return 
 */  
public static String getIpAddress(HttpServletRequest request) {  
    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.getHeader("HTTP_CLIENT_IP");  
    }  
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = request.getHeader("HTTP_X_FORWARDED_FOR");  
    }  
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = request.getRemoteAddr();  
    }  
    return ip;  
}  
}

方式二

 /**


     * 获取客户端ip地址(可以穿透代理)

     * 

     * @param request

     * @return

     */

    public static String getRemoteAddr(HttpServletRequest request) {

        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.getHeader("HTTP_CLIENT_IP");

        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

            ip = request.getHeader("HTTP_X_FORWARDED_FOR");

        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

            ip = request.getRemoteAddr();

        }

        return ip;

    }

方式三

private

 static final String[] HEADERS_TO_TRY = { 

        "X-Forwarded-For",

        "Proxy-Client-IP",

        "WL-Proxy-Client-IP",

        "HTTP_X_FORWARDED_FOR",

        "HTTP_X_FORWARDED",

        "HTTP_X_CLUSTER_CLIENT_IP",

        "HTTP_CLIENT_IP",

        "HTTP_FORWARDED_FOR",

        "HTTP_FORWARDED",

        "HTTP_VIA",

        "REMOTE_ADDR",

        "X-Real-IP"};

 

    /***

     * 获取客户端ip地址(可以穿透代理)

     * @param request

     * @return

     */

    public static String getClientIpAddress(HttpServletRequest request) {

        for (String header : HEADERS_TO_TRY) {

            String ip = request.getHeader(header);

            if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {

                return ip;

            }

        }

        return request.getRemoteAddr();

    }

方式四

/***


     * 获取客户端ip地址(可以穿透代理)

     * @param request

     * @return

     */

    public static String getClientIpAddr(HttpServletRequest request) {  

        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.getHeader("HTTP_X_FORWARDED_FOR");  

        }  

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

            ip = request.getHeader("HTTP_X_FORWARDED");  

        }  

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

            ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP");  

        }  

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

            ip = request.getHeader("HTTP_CLIENT_IP");  

        }  

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

            ip = request.getHeader("HTTP_FORWARDED_FOR");  

        }  

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

            ip = request.getHeader("HTTP_FORWARDED");  

        }  

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

            ip = request.getHeader("HTTP_VIA");  

        }  

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

            ip = request.getHeader("REMOTE_ADDR");  

        }  

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

            ip = request.getRemoteAddr();  

        }  

        return ip;  

    }

方式五

public

 static String getIpAddr(HttpServletRequest request) {

        String ip = request.getHeader("X-Real-IP");

        if (null != ip && !"".equals(ip.trim())

                && !"unknown".equalsIgnoreCase(ip)) {

            return ip;

        }

        ip = request.getHeader("X-Forwarded-For");

        if (null != ip && !"".equals(ip.trim())

                && !"unknown".equalsIgnoreCase(ip)) {

            // get first ip from proxy ip

            int index = ip.indexOf(',');

            if (index != -1) {

                return ip.substring(0, index);

            } else {

                return ip;

            }

        }

        return request.getRemoteAddr();
}

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱做梦的小咸鱼

对您提供帮助,是我的荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值