miércoles, 14 de mayo de 2008

Problemas al loguear la IP cliente

Hoy estamos corriendo detras de un tema que es obtener la IP cliente este en la topologia que este.
Necesitamos loguear los accesos y sacar estadisticas sobre estas ip's. Al estilo Apache, nosotros podemos tomar cualquier header HTTP y loguearlo en un access.log

En el caso de Oracle Web Cache, que actua de Proxy reverso, esta setea la ip cliente en un header HTTP llamado "
Client-IP" (que no encontre en el estandard HTTP 1.1). Este es nuestro reverse proxy interno.

En el caso del balanceador, el CISCO que tenemos JUSTO no tiene la funcionalidad de setear el header "X-Forwaded-for", asi que nos estamos queriendo matar. Adjunto un link de una pagina muy interesante sobre el tema:
http://lbdigest.com/2008/01/09/question-about-source-ip-addresses/

Algunos proxies de internet setean el X-Forwarded-for, otros dispositivos intermedios pueden setear otros headers (Como "NP-Client" o algo asi), pero el estandar es el X-Forwarded-for.

En el PEOR de los casos, y si la aplicacion es propia, lo unico que queda es que la ip del cliente venga como un parametro de aplicacion, por lo que nos veremos obligados a, si es HTTP, obtenerla a traves de un applet/server side javascript. Por javascript puro no hay forma de obtenerlo y VBScript esta atado a IE.
Adjunto un link al respecto. Como obtenerla en distintos lenguajes:
http://javascript.about.com/library/blip.htm
Una de las mas prolijas dentro de toda la desprolijidad es invocar a la JVM que esta en el browser:


<html>
<body>

<
script language="javascript">
var ip = java.net.InetAddress.getLocalHost().getHostAddress();
document.writeln('IP=="' + ip + '"');
script>
body>
html>

(los tags no estan cerrados por problemas de publicacion en el blog)