inet_aton
IPv4 IP(216.12.207.142) を文字列 3624718222 に変換するために使用しています。そのために次のコードを使用します。
ip_dec = unpack('>L', inet_aton(ip))[0]
ここで、IPv6 ip 2001:23::207:142 を同様の文字列に変換する必要があります。IPv4 アドレスではないため、エラーが発生します。これどうやってするの?
inet_aton
IPv4 IP(216.12.207.142) を文字列 3624718222 に変換するために使用しています。そのために次のコードを使用します。
ip_dec = unpack('>L', inet_aton(ip))[0]
ここで、IPv6 ip 2001:23::207:142 を同様の文字列に変換する必要があります。IPv4 アドレスではないため、エラーが発生します。これどうやってするの?
これは、以前の目的で使用したコードです。文字列ではなく 128 ビット整数を返すことに注意してください (一般的には整数の方が便利です)。
from socket import inet_pton, AF_INET6
from struct import unpack
def ip6_to_integer(ip6):
ip6 = inet_pton(AF_INET6, ip6)
a, b = unpack(">QQ", ip6)
return (a << 64) | b
そしてそれをテストする
>>> ip6_to_integer("2001:23::207:142")
42540490934961530759802172199372521794L
または、必要に応じて文字列として!
>>> str(ip6_to_integer("2001:23::207:142"))
'42540490934961530759802172199372521794'