Convert IPv6 address to binary representation on 2.x/Windows

Philipp Hagemeister phihag at phihag.de
Wed Mar 4 15:30:23 EST 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

socket.inet_pton which does exactly what I want is not available on 2.x
on Windows. Strangely, the documentation of socket.inet_aton (IPv4 only)
reads:

"inet_aton() does not support IPv6, and getnameinfo() should be used
instead for IPv4/v6 dual stack support."

Let's try that:

>>> def gni(flag, addr="::1", port=80):
...     try:
...             res = socket.getnameinfo((addr,port), flag)
...     except:
...             res = "error"
...     return res
...
>>> [(ni,gni(socket.__dict__[ni])) for ni in filter(lambda
k:k.startswith("NI_"), dir(socket))]

[('NI_DGRAM', ('localhost', 'www')), ('NI_MAXHOST', 'error'),
('NI_MAXSERV', ('localhost', 'www')), ('NI_NAMEREQD', ('localhost',
'www')), ('NI_NOFQDN', ('localhost', 'www')), ('NI_NUMERICHOST', ('::1',
'www')), ('NI_NUMERICSERV', ('localhost', '80'))]
>>>

Neither of these values looks like 0x0000000000000001. Am I missing
something or is the documentation just wrong? If so, how am I supposed
to get a binary representation of an IPv6 address in the absence of
socket.inet_pton? Should I write my I own version?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEAREKAAYFAkmu5N4ACgkQ9eq1gvr7CFwNUgCdF4QdT2LlWWXNlKYbBvKEeTlh
lDMAn2eGmFdx7rvM9+gr7tnHlENhgmq7
=Gsal
-----END PGP SIGNATURE-----



More information about the Python-list mailing list