繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM