2016-10-20 4 views
1

私のようなIPアドレスネットワークのリストを持っている:IPaddress -/30のリストから次の使用可能な/ 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] 
関連する問題