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

时间:2014-10-11 14:04:13

标签: 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这样的现有模块,但它似乎没有像这样的功能。我不确定自己编写自己的模块需要什么样的数学运算。

2 个答案:

答案 0 :(得分:5)

如果您使用Python 3.3 +,则可以使用ipaddress模块:

>>> 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后端:py2-ipaddress

答案 1 :(得分:5)

在Python 3.3中使用新的ipaddress模块:

import ipaddress

for i in ipaddress.ip_network('10.0.0.0/8').subnets(new_prefix=22):
    print(i)