我试图采取一个已知子网ID和CIDR掩码,例如10.0.0.0/22子网列表,并得到像这样的列表:获取匹配特定CIDR
[('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
,但它似乎没有这样的功能。我不确定什么样的数学对我来说是必要的,我也可以自己编写模块。
我试图采取一个已知子网ID和CIDR掩码,例如10.0.0.0/22子网列表,并得到像这样的列表:获取匹配特定CIDR
[('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')
UPDATE
有Python的2.7反向移植的Python 3.3 ipaddress:py2-ipaddress
。
使用新ipaddress
模块在Python 3.3:
import ipaddress
for i in ipaddress.ip_network('10.0.0.0/8').subnets(new_prefix=22):
print(i)
'10.0.0.0/22''s网络地址是'10.0.0.0',广播地址是'10.0.3.255'。其他地址在网络之外。 – falsetru 2014-10-11 14:10:26
@falsetru我知道,我想要做的是获得第一个八位组下的所有子网列表并匹配/ 22掩码。 – Soviero 2014-10-11 14:11:39
@Soviero实际上你错了,因为第一个八位字节已经没有意义了(这不是特别的)。 – 2014-10-11 14:15:28