python - 为什么 Python3 ipaddress.IPv6Network.hosts 函数省略第一个和最后一个 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("\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 中 - 至少 section-2.5.4 of RFC4291似乎没有提到它。我检查了勘误表,我认为更新的 RFC 不相关。 interface identifiers 部分似乎也没有保留第一个/最后一个地址。

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

编辑: 好的,看起来第一个地址是 Subnet-Router anycast address ,这就解释了为什么省略第一个地址。

最后一个地址可能是 reserved anycast address ,尽管例如 2001:db8::fe/120 (您可以在上面的输出中找到),所以这肯定是不一致的处理。有谁知道为什么吗?

最佳答案

这是 the ipaddress module 中的错误与 IPv4 不同,IPv6 子网中的第一个和最后一个地址都是有效且可用的,尽管正如您所指出的,它们可能有特殊用途。

Python 错误跟踪器快速调查 doesn't turn up this bug ,因此您的下一步应该是提交错误报告。

关于python - 为什么 Python3 ipaddress.IPv6Network.hosts 函数省略第一个和最后一个 IPv6 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19159168/

相关文章:

android - 是否可以在 android 操作系统上运行简单的 python 游戏

python - Gensim on windows : C extension not loaded, 训练会很慢

python - 在 python 中检查区分大小写的 os.path.isfile(filename)

c - 大文件上传到基于 libevent 的 HTTP 服务器

php - 在 LAN 上共享您的源代码 (PHP)

python - python3.4中没有名为 'cx_Freeze.util' ---cxFreeze的模块

python - 三角计算器 Python

networking - TCPConn SetWriteDeadline 不工作

python-3.x - 无法在 Windows 10 和 Python 3.7 上安装 dlib

python - 如何选择字符串中的整数?