1

给定 IPv6 地址的二进制或字符串表示形式及其前缀长度,在 Python 中提取前缀的最佳方法是什么?

是否有图书馆可以为我做这件事,或者我必须:

  1. 将地址从字符串转换为 int (inet_ntop)
  2. 屏蔽前缀
  3. 将前缀转换回二进制
  4. 将二进制转换为字符串 (inet_ntop)
4

3 回答 3

2

请参阅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::'

等等

于 2008-12-11T21:21:41.753 回答
0

使用 python netaddr库:

>>> from netaddr.ip import IPNetwork, IPAddress
>>> IPNetwork('2001:888:2000:d::a2/64').network
2001:888:2000:d::
于 2011-10-05T12:10:32.453 回答
0

您还可以编写一个自己的小函数来提取 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
于 2020-05-31T12:47:19.117 回答