为什么Python3 ipaddress.IPv6Network.hosts函数会忽略第一个和最后一个IPv6地址?

为什么Python3 ipaddress.IPv6Network.hosts函数会忽略第一个和最后一个IPv6地址?,python,networking,python-3.x,ipv6,Python,Networking,Python 3.x,Ipv6,我注意到给定网络的第一个和最后一个IPv6地址被省略: $ python3 Python 3.3.2 (default, Sep 6 2013, 09:30:10) [GCC 4.8.1 20130725 (prerelease)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import ipaddress >>> print("\

我注意到给定网络的第一个和最后一个IPv6地址被省略:

$ python3
Python 3.3.2 (default, Sep  6 2013, 09:30:10) 
[GCC 4.8.1 20130725 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ipaddress
>>> print("\n".join([str(x) for x in ipaddress.ip_network("2001:0db8::/120").hosts()]))
2001:db8::1
2001:db8::2
...
2001:db8::fe
>>> 
>>> hex(int(ipaddress.ip_address('2001:db8::fe')))
'0x20010db80000000000000000000000fe'
我相信对于IPv4来说这是正确的,因为它们代表网络和广播地址,但我不相信IPv6中存在这些地址-至少似乎没有提到它。我检查了勘误表,我认为更新的RFC不相关。上的部分似乎也没有保留第一个/最后一个地址

有人知道为什么省略这些地址吗?这是标准库中的错误吗

编辑: 看起来第一个地址是a,这就解释了为什么省略第一个地址

最后一个地址可以是a,但例如
2001:db8::fe/120
(您可以在上面的输出中找到),因此这肯定是处理不一致的。有人知道原因吗?

这是一个错误,因为与IPv4不同,IPv6子网中的第一个和最后一个地址都是有效的和可用的,尽管它们可能有特殊用途,如您所述


快速查看Python的bug跟踪器,因此下一步应该是对其提交bug报告。

这是
ipaddress
中的bug。代码仍然提到网络和广播地址,但它们在IPv6中不再存在。而且
/120
是非常不标准的,您应该避免小于
/64
的子网。这一点很好-在这种情况下,我只想在合理的时间内完成输出:)