python - CIDR 重叠不可能的结果 Python
问题描述
我无法解释以下内容。Cloudformation 告诉我我的子网重叠。我简直不敢相信,所以我在 python 中对其进行了测试。这就是我得到的:
In [0]: import ipaddr
In [12]: ipaddr.IPNetwork('10.0.128.0/23').overlaps(ipaddr.IPNetwork('10.0.136.0/20'))
Out[12]: True
In [18]: ipaddr.IPNetwork('10.0.128.0/23').overlaps(ipaddr.IPNetwork('10.0.144.0/20'))
Out[18]: False
In [19]: ipaddr.IPNetwork('10.0.128.0/23').overlaps(ipaddr.IPNetwork('10.0.143.0/20'))
Out[19]: True
In [0]: import ipaddr
In [20]: ipaddr.IPNetwork('10.0.134.0/23').overlaps(ipaddr.IPNetwork('10.0.136.0/20'))
Out[20]: True
In [22]: ipaddr.IPNetwork('10.0.134.0/23').overlaps(ipaddr.IPNetwork('10.0.144.0/20'))
Out[22]: False
In [23]: ipaddr.IPNetwork('10.0.134.0/23').overlaps(ipaddr.IPNetwork('10.0.143.0/20'))
Out[23]: True
这根本不可能是这样,不是吗?首先,10.0.134.0/23 的最后一个 IP 地址应该是 10.0.135.255。所以它不应该与 10.0.136.0/20 重叠。
但是,类似地,根据这个程序,为什么两个 CIDR 都应该在 10.0.144.0 结束?
程序根本不可靠吗?
注意:新库ipaddress
似乎同意。
解决方案
10.0.136.0
不是/20
网络的开始。它位于网络的中间10.0.128.0/20
,范围从10.0.128.0
到10.0.143.255
。这显然与10.0.134.0/23
.
新ipaddress
模块对此进行检查。ipaddress.ip_network('10.0.136.0/20')
引发异常:
ValueError: 10.0.136.0/20 已设置主机位
您可以使用该选项禁止检查strict=False
,但您不会收到有关该问题的警告。但是,如果您查看返回的值,您会看到地址范围从哪里开始。
>>> print(ipaddress.ip_network('10.0.136.0/20', strict=False))
10.0.128.0/20
网络/20
有第三个八位字节,是 16 的倍数。
推荐阅读
- linux - 带有 Ansible Tower 调查的 Ansible vmware_guest 可选磁盘
- excel - Excel:按月分组
- java - Minecraft 在 LAN 世界中的玩家之间共享库存
- bash - 有没有一种安全的方法可以在另一个 Gitlab 项目中使用一个 Gitlab 项目?
- c++ - 在双向链表的析构函数中为 RtlvalidateHeap 指定的地址无效
- python - 使用 PyGithub 仅返回问题
- python - nidaqmx:防止任务在功能更改后关闭
- html - 向上平移元素并影响流程
- mysql - 使用 fts + 复合索引优化查询
- iphone - Ubuntu 18.04 主机上的 Mac OS Catalina 10.15.2 VMWare 无法识别 iPhone 6s