IP 地址 - 从 /30 列表中找到下一个可用的 /30 网络?
IPaddress - find the next usable /30 network from a list of /30s?
我有一个 IP 地址网络列表:
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'))
我不知道该怎么做,但我想要一个 return 下一个可用 /30
的函数,所以第一个结果应该是 172.16.1.16/30
然后一次使用下一个结果应该是 172.16.1.28/30
.
子网列表也可能不按顺序...
这可能吗?我似乎无法理解完成这项工作需要什么逻辑。
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]
我有一个 IP 地址网络列表:
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'))
我不知道该怎么做,但我想要一个 return 下一个可用 /30
的函数,所以第一个结果应该是 172.16.1.16/30
然后一次使用下一个结果应该是 172.16.1.28/30
.
子网列表也可能不按顺序...
这可能吗?我似乎无法理解完成这项工作需要什么逻辑。
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]