我正在尝试使用已知的子网 ID 和 CIDR 掩码,例如 10.0.0.0/22,并获得如下列表:
[('10.0.0.0', '10.0.3.255'),
('10.0.4.0', '10.0.7.255'),
...
('10.255.252.0', '10.255.255.255')]
我已经尝试了一些现有的模块,例如 ipcalc
,但它似乎没有这样的功能。我也不确定要编写自己的模块来执行此操作需要什么样的数学。
最佳答案
您可以使用 ipaddress
模块,如果你使用 Python 3.3+:
>>> import ipaddress
>>> it = ipaddress.ip_network('10.0.0.0/8').subnets(new_prefix=22)
>>> networks = [(str(n.network_address), str(n.broadcast_address)) for n in it]
>>> len(networks)
16384
>>> networks[0]
('10.0.0.0', '10.0.3.255')
>>> networks[-1]
('10.255.252.0', '10.255.255.255')
在 Python 2.x 中,使用 ipaddr
:
>>> import ipaddr
>>> it = ipaddr.IPNetwork('10.0.0.0/8').subnet(new_prefix=22)
>>> networks = [(str(n.network), str(n.broadcast)) for n in it]
>>> len(networks)
16384
>>> networks[0]
('10.0.0.0', '10.0.3.255')
>>> networks[-1]
('10.255.252.0', '10.255.255.255')
更新
有 Python 3.3 ipaddress 的 Python 2.7 backport:py2-ipaddress
.
关于python - 获取与给定 CIDR 匹配的子网列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315475/