我尝试使用已知的子网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
这样的现有模块,但它似乎没有像这样的功能。我不确定自己编写自己的模块需要什么样的数学运算。
答案 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)