[Python-Dev] IPv6 hostname resolution using socket.getaddrinfo() (original) (raw)
O.R.Senthil Kumaran orsenthil at gmail.com
Mon Sep 17 18:37:36 CEST 2007
- Previous message: [Python-Dev] 'text' mode rears its ugly head again
- Next message: [Python-Dev] IPv6 hostname resolution using socket.getaddrinfo()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
To get the hostname, I can use socket.gethostbyname() but that has an inherent limitation wherein does it not support IPv6 name resolution, and getaddrinfo() should be used instead.
Looking up the socket.getaddrinfo() documentation, I come to know that
The getaddrinfo() function returns a list of 5-tuples with the following structure:
(family, socktype, proto, canonname, sockaddr)
family, socktype, proto are all integer and are meant to be passed to the socket() function. canonname is a string representing the canonical name of the host. It can be a numeric IPv4/v6 address when AI_CANONNAME is specified for a numeric host.
With this information, if I try something like this:
for res in socket.getaddrinfo('goofy.goofy.com', None, socket.AI_CANONNAME):
print res
(2, 1, 6, '', ('10.98.1.6', 0)) (2, 2, 17, '', ('10.98.1.6', 0)) (2, 3, 0, '', ('10.98.1.6', 0))
In the output, I see the cannoname to be always blank ''. I am not getting the IPv4 or IPv6 address as a result of using getaddrinfo().
Am I making any mistake?
What i am trying is a replacement function for socket.gethostbyname(hostname) which will work for both IPv4 and IPv6 (and make changes in urllib2 to support that)
return hostbyname for either IPv4 or IPv6 address. Common function.
def ipv6_gethostbyname(hostname): for res in socket.getaddrinfo(hostname,None, socket.AI_CANONNAME): fa, socktype, proto, canonname, sa = res return cannoname
The above function does not seem to work. It returns blank value only.
Any help/ pointers?
-- O.R.Senthil Kumaran http://uthcode.sarovar.org
- Previous message: [Python-Dev] 'text' mode rears its ugly head again
- Next message: [Python-Dev] IPv6 hostname resolution using socket.getaddrinfo()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]