2016-10-20 56 views
1

我有ip地址的網絡列表這樣:IP地址 - 從/ 30s列表中找到下一個可用的/ 30網絡?

172.16.1.0/30 
172.16.1.4/30 
172.16.1.8/30 
172.16.1.12/30 
172.16.1.20/30 
172.16.1.24/30 

他們創建爲每如下:

sr_data = SiteConfigData.objects() 

ls_subnets = [] 
for r in sr_data: 
if r.ip != '0.0.0.0': 
    ls_subnets.append(ipaddress.ip_network(r.ip + '/30')) 

我不知道如何做到這一點,但我想給一個函數返回下一個可用的/30,所以第一個結果應該是172.16.1.16/30,那麼一旦使用,下一個結果應該是172.16.1.28/30

子網的名單也可能不是爲了...

這可能嗎?我似乎無法圍繞我需要做什麼邏輯來完成這項工作。

+0

什麼參數傳遞給這個函數?它是如何知道當前可用的,以便確定什麼是「下一個」?你的問題太模糊了。 – martineau

回答

1

ip_addresses列表就像您的代碼的ls_subnets一樣。

ip_addresses = [ 
    "172.16.1.0/30", 
    "172.16.1.4/30", 
    "172.16.1.8/30", 
    "172.16.1.12/30", 
    "172.16.1.20/30", 
    "172.16.1.24/30", 
    ] # Assuming the input is neat 
used_subnets = [] 
for ip_address in ip_addresses: 
    ip_address = ip_address.replace("/30","") 
    a,b,c,d = map(int,ip_address.split('.')) 
    used_subnets.append(d) 
unused_subnets = ['172.16.1.%d/30'%num for num in range(0,30,4) if num not in used_subnets] 
相關問題