socket.gethostbyaddr( os.environ['REMOTE_ADDR'] error

Nick Dokos nicholas.dokos at
Mon Jan 9 18:32:44 EST 2012

Chris Angelico <rosuav at> wrote:

> On Tue, Jan 10, 2012 at 9:35 AM, Dominic Binks <dbinks at> wrote:
> > The address database can have multiple names for the same IP address so
> > gethostbyaddr returns a list - [0] being the first item in the list (and
> > usually considered the canonical name)
> Point to note: The inverse operation, getting IP addresses from names,
> quite frequently returns multiple results - and in that case, there's
> no "canonical name". You'll still usually want to take the zeroth
> (first) item in the list, but often the list will change in order.
> Try, for instance:
> $ dig +short
> which uses DNS rotation as a form of load-balancing.
> In any case, you normally just take the first entry.

On both 2.6.6 and 2.7.1, the doc says: 

| >>> help(socket.gethostbyaddr)
| Help on built-in function gethostbyaddr in module _socket:
| gethostbyaddr(...)
|     gethostbyaddr(host) -> (name, aliaslist, addresslist)
|     Return the true host name, a list of aliases, and a list of IP addresses,
|     for a host.  The host argument is a string giving a host name or IP number.

so socket.gethostbyaddr(os.environ['REMOTE_ADDR'])[0] is the 0th element
of the tuple, i.e. the *name* that is returned. So (unless I'm confused
which is always a distinct possibility) this has nothing to do with
load-balancing or multiple addresses: it's the equivalent of 

  dig +short -x <addr>


More information about the Python-list mailing list