我試圖採取一個已知子網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