python ipaddr 库网络掩码 IPv6
python ipaddr library netmask IPv6
我正在使用 python-ipaddr 库。
我无法为 IPv6
指定网络掩码 addresses.It 只需要一个 CIDR
符号。
>>> ipaddr.IPv6Network('2001:db00::0/24')
IPv6Network('2001:db00::/24')
>>> ipaddr.IPv6Network('2001:db00::0/ffff:ff00::')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/ipaddr.py", line 1925, in __init__
raise NetmaskValueError(addr[1])
ipaddr.NetmaskValueError: ffff:ff00::
有没有办法使用 netmask
作为 IPv6 地址而不是 CIDR
?
如果没有,是否有 python 支持此功能的库?
对于 IPv6
,将 netmask
转换为 CIDR
的最 pythonic 方法是什么
TIA
IPv6 不再使用网络掩码,始终使用 CIDR 表示法。 CIDR 符号在 IPv4 中也很常见,因为它比那些笨拙的网络掩码更容易处理:)
CIDR 是在 IPv6 中指定子网的唯一官方方式。
所以可能没有库支持这个。
但是你可以计算bits,然后以bit-count为后缀将其转换为CIDR。
mask = "ffff:fff0::"
bitCount = [0, 0x8000, 0xc000, 0xe000, 0xf000, 0xf800, 0xfc00, 0xfe00, 0xff00, 0xff80, 0xffc0, 0xffe0, 0xfff0, 0xfff8, 0xfffc, 0xfffe, 0xffff]
count = 0
try:
for w in mask.split(':'):
if not w or int(w, 16) == 0: break
count += bitCount.index(int(w, 16))
except:
raise SyntaxError('Bad NetMask')
我正在使用 python-ipaddr 库。
我无法为 IPv6
指定网络掩码 addresses.It 只需要一个 CIDR
符号。
>>> ipaddr.IPv6Network('2001:db00::0/24')
IPv6Network('2001:db00::/24')
>>> ipaddr.IPv6Network('2001:db00::0/ffff:ff00::')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/ipaddr.py", line 1925, in __init__
raise NetmaskValueError(addr[1])
ipaddr.NetmaskValueError: ffff:ff00::
有没有办法使用 netmask
作为 IPv6 地址而不是 CIDR
?
如果没有,是否有 python 支持此功能的库?
对于 IPv6
netmask
转换为 CIDR
的最 pythonic 方法是什么
TIA
IPv6 不再使用网络掩码,始终使用 CIDR 表示法。 CIDR 符号在 IPv4 中也很常见,因为它比那些笨拙的网络掩码更容易处理:)
CIDR 是在 IPv6 中指定子网的唯一官方方式。
所以可能没有库支持这个。
但是你可以计算bits,然后以bit-count为后缀将其转换为CIDR。
mask = "ffff:fff0::"
bitCount = [0, 0x8000, 0xc000, 0xe000, 0xf000, 0xf800, 0xfc00, 0xfe00, 0xff00, 0xff80, 0xffc0, 0xffe0, 0xfff0, 0xfff8, 0xfffc, 0xfffe, 0xffff]
count = 0
try:
for w in mask.split(':'):
if not w or int(w, 16) == 0: break
count += bitCount.index(int(w, 16))
except:
raise SyntaxError('Bad NetMask')