import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.servlet.http.HttpServletRequest;
public class ToolIP {
/**
* 功能:獲取本地IP
* 如果沒有獲取到本地IP則返回0.0.0.0
*
* @return 本地IP地址
*/
public static String getLocalIpAddr() {
String localIpAddr;
try {
localIpAddr = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
localIpAddr = "0.0.0.0";
}
return localIpAddr;
}
/**
* 獲取用戶真實(shí)IP地址,不使用request.getRemoteAddr()的原因是有可能用戶使用了代理軟件方式避免真實(shí)IP地址,
* 可是,如果通過了多級(jí)反向代理的話,X-Forwarded-For的值并不止一個(gè),而是一串IP值
*
* @return ip
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后會(huì)有多個(gè)ip值,第一個(gè)ip才是真實(shí)ip
if( ip.indexOf(",")!=-1 ){
ip = ip.split(",")[0];
}
}
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.getHeader("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
新聞標(biāo)題:獲取IP地址工具類
鏈接URL:
http://weahome.cn/article/gdjohs.html