您的位置:

Java获取客户端IP

一、IP地址的概述

IP(Internet Protocol)地址是指互联网协议地址, 就是分配给用户上网使用的地址。

二、获取IP地址的常见方法

在Java中,获取客户端的IP地址是一项常见的任务。以下是获取客户端IP的几种常见方法:

1. 通过HttpServletRequest对象获取

String ip = request.getRemoteAddr();

这种方法简单直观,只需要通过HttpServletRequest对象的getRemoteAddr()方法获取即可。但它无法获取到有些客户端的真实IP地址。

2. 通过请求头X-Forwarded-For获取

String ip = request.getHeader("X-Forwarded-For");
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
    int index = ip.indexOf(",");
    if (index != -1) {
        return ip.substring(0, index);
    } else {
        return ip;
    }
}

这种方法可以获取有些客户端的真实IP地址,但是如果客户端没有经过代理服务器,则无法获取到真实IP地址。

3. 通过代理服务器获取

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地址,但是如果使用了高匿名代理,则无法获取到真实IP地址。

三、使用第三方库获取IP地址

如果以上方法都无法满足需求,可以使用第三方库获取IP地址。例如:InetTreeDruid。这些库通常需要导入jar包,并提供获取IP地址的API接口。