Учитывая двоичное или строковое представление IPv6-адреса и длину его префикса, как лучше всего извлечь префикс в Python?
Есть ли библиотека, которая сделает это за меня, или мне придется:






См. http://code.google.com/p/ipaddr-py/
С этим вы можете сделать
py> p=ipaddr.IPv6("2001:888:2000:d::a2")
py> p.SetPrefix(64)
py> p
IPv6('2001:888:2000:d::a2/64')
py> p.network_ext
'2001:888:2000:d::'
и т.п.
Используя библиотеку python netaddr:
>>> from netaddr.ip import IPNetwork, IPAddress
>>> IPNetwork('2001:888:2000:d::a2/64').network
2001:888:2000:d::
Вы также можете написать небольшую собственную функцию, которая извлекает префикс IPv6:
# Returns the IPv6 prefix
def getIPv6Prefix(ipv6Addr, prefixLen):
prefix = ""
curPrefixLen = 0
ipv6Parts = ipv6Addr.split(":")
for part in ipv6Parts:
if not prefix == "": # if it's not empty
prefix = prefix + ":"
prefix = prefix + part
curPrefixLen += 32
if int(curPrefixLen) >= int(prefixLen):
return prefix
return prefix