Este código se puede utilizar para obtener la dirección IP del cliente que se conecta a través de un proxy.
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_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;
}
Pero solo se detecta cuando el proxy es transparente.
A continuación se muestra la información de proxy HTTP:
No se usa un servidor proxy:
request.getRemoteAddr()
= dirección IP del cliente
request.getHeader("HTTP_X_FORWARDED_FOR")
= Ningún valor o no muestran la
Uso Transparent Pro xies:
HTTP_X_FORWARDED_FOR
= dirección IP real del cliente proxy
uso normal anónimos:
request.getRemoteAddr()
= dirección IP del servidor proxy
HTTP_X_FORWARDED_FOR
= dirección IP del servidor proxy
En realidad, esto no funciona: en lugar de 'HTTP_X_FORWARD_FOR', es 'HTTP_X_FORWARDED_FOR' – lauhub