[英]Why does the Python3 ipaddress.IPv6Network.hosts function omit the first and last IPv6 address?
我注意到,省略了给定网络的第一个和最后一个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中-至少RFC4291的2.5.4节似乎没有提及。 我检查了勘误表,但我认为更新的RFC不相关。 接口标识符部分也似乎没有保留前/后地址。
有谁知道为什么省略这些地址? 这是标准库中的错误吗?
编辑:好的,看起来第一个地址是Subnet-Router任意播地址 ,因此可以解释为什么省略第一个地址。
最后一个地址可以是保留的任意播地址 ,尽管例如2001:db8::fe/120
(您可以在上面的输出中找到),所以肯定处理不一致。 有人知道为什么吗?
这是ipaddress
模块中的一个错误,与IPv4不同,IPv6子网中的第一个和最后一个地址都是有效和可用的,尽管您可能已经注意到它们有特殊用途。
快速检查Python的错误跟踪器不会发现此错误 ,因此下一步应该是提交有关此错误的报告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.