【问题标题】:IPaddress - find the next usable /30 network from a list of /30s?IPaddress - 从 /30s 列表中找到下一个可用的 /30 网络?
【发布时间】:2016-10-20 11:14:41
【问题描述】:

我有一个这样的 ipaddress 网络列表:

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 .

子网列表也可能不按顺序排列...

这可能吗?我似乎无法理解完成这项工作需要什么逻辑。

【问题讨论】:

  • 传递给这个函数的参数是什么?它如何知道当前可用的那些,以便确定“下一个”是什么?你的问题太模糊了。

标签: python ip-address


【解决方案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]

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2021-11-05
    • 2021-10-26
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多