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;
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章