NetworkUtils
阅读原文时间:2022年04月17日阅读:1

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

public class NetworkUtils {

 private static Logger logger = Logger.getLogger(NetworkUtils.class); 

/\*\*  
 \* 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;  
 \*  
 \* @param request  
 \* @return  
 \* @throws IOException  
 \*/  
public final static String getIpAddress(HttpServletRequest request) throws IOException {  

    // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址  
    String ip = request.getHeader("X-Forwarded-For");  
    if (logger.isDebugEnabled()) {  
        logger.debug("getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip=" + ip);  
    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("Proxy-Client-IP");  
            if (logger.isDebugEnabled()) {  
                logger.debug("getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip=" + ip);  
            }  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("WL-Proxy-Client-IP");  
            if (logger.isDebugEnabled()) {  
                logger.debug("getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip=" + ip);  
            }  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP\_CLIENT\_IP");  
            if (logger.isDebugEnabled()) {  
                logger.debug("getIpAddress(HttpServletRequest) - HTTP\_CLIENT\_IP - String ip=" + ip);  
            }  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP\_X\_FORWARDED\_FOR");  
            if (logger.isDebugEnabled()) {  
                logger.debug("getIpAddress(HttpServletRequest) - HTTP\_X\_FORWARDED\_FOR - String ip=" + ip);  
            }  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getRemoteAddr();  
            if (logger.isDebugEnabled()) {  
                logger.debug("getIpAddress(HttpServletRequest) - getRemoteAddr - String ip=" + ip);  
            }  
        }  
    } else if (ip.length() > 15) {  // 通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串Ip值  
        String\[\] ips = ip.split(",");  
        for (int index = 0; index < ips.length; index++) {  
            String strIp = (String) ips\[index\];  
            if (!("unknown".equalsIgnoreCase(strIp))) {  
                ip = strIp;  
                break;  
            }  
        }  
    }  
    return ip;  
}  

}