On Wed, 08 Jul 2009 20:53:12 -0700, Fred Atkinson wrote: >>ipaddr = (getenv("HTTP_CLIENT_IP") or >> getenv("HTTP_X_FORWARDED_FOR") or >> getenv("HTTP_X_FORWARDED_FOR") or >> getenv("REMOTE_ADDR") or >> "UNKNOWN") >> >>print ipaddr > > That did it. > > I wonder why they don't just have a function to return it instead of > putting you through all of that?
There's no unambiguous definition of "client IP", so you have to choose which definition you want. REMOTE_ADDR is set to the actual IP address from which the connection originated (from getpeername()). If the connection was made via a proxy, REMOTE_ADDR will contain the IP address of the proxy. The others are set from HTTP headers. Proxies often add Client-IP or X-Forwarded-For headers to indicate the originating IP address. OTOH, there's no way to know if the headers are accurate; nuisance users may add these headers to confuse poorly-conceived banning mechanisms. -- http://mail.python.org/mailman/listinfo/python-list