python - 获取与给定 CIDR 匹配的子网列表

标签 python network-programming

我正在尝试使用已知的子网 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/

相关文章:

java - 这是什么意思 "couldn' t read CGI input from STDIN after alloc read 0 "

python - Chrome : API for performance data

c++ - 如何调用复合模块的参数?

python - 点制 3D 表面的颜色

python - 谷歌应用引擎 : How to read text file using python?

python /dpkt : Find out if packet is a tcp packet or a udp packet ,

java - DatagramSocket发送方法是异步的?

winapi - 如何通过WinApi判断默认网卡?

python列表列表索引

Python - 就地替换 - 使用 close() 删除 .bak 备份文件?