在 Python 的子网列表中的子网中找到所有不同的最大子网,它们是超网
find all the different biggest subnets that are supernet among subnets in a list of subnets in Python
我有一个子网列表,我需要从子网列表中找到所有最大的子网,这些子网是列表中存在的子网中的超网。
例子
subnetList = ['10.10.0.0/16', '10.10.10.10/32', '192.168.56.0/24', '10.0.0.0/8']
所以这里的输出['10.0.0.0/8', '192.168.56.0/24']
是列表中不同子网中的两个顶级超网
为了解决这个问题,我目前正在使用使用 ipaddress python lib,
的实现
有没有更好的实现方式!!!!
因为这个问题似乎是在列表中找到多个不同类型的最大值
import ipaddress
inputS = ['172.16.0.0/16' ,'10.10.0.0/16', '10.10.10.10/32', '172.16.1.0/24', '10.10.10.0/24', '172.16.10.10/32', '192.168.56.0/24', '10.0.0.0/8']
inputS = list(set(inputS))
input = []
for each in inputS:
input.append(ipaddress.ip_network(str(each)))
input1 = input
for i in range(len(input)):
for j in range(len(input1)):
if str(input[i]) != str(input1[j]):
if input[i].supernet_of(input1[j]):
input1[j] = input[i]
output = []
for each in input1:
output.append(str(each))
print(list(set(output)))
python 中的 ipaddress 库有一个函数 collapse_addresses。 collapse_addresses 函数应该能够从输入的 ip 地址列表中直接输出超网。
请检查以下代码片段:
>>> import ipaddress
>>> inputS = ['172.16.0.0/16' ,'10.10.0.0/16', '10.10.10.10/32', '172.16.1.0/24', '10.10.10.0/24', '172.16.10.10/32', '192.168.56.0/24', '10.0.0.0/8']
>>> input_ips = [ipaddress.ip_network(x) for x in inputS]
>>> res = ipaddress.collapse_addresses(input_ips)
>>> print([x for x in res])
[IPv4Network('10.0.0.0/8'), IPv4Network('172.16.0.0/16'), IPv4Network('192.168.56.0/24')]
我有一个子网列表,我需要从子网列表中找到所有最大的子网,这些子网是列表中存在的子网中的超网。
例子
subnetList = ['10.10.0.0/16', '10.10.10.10/32', '192.168.56.0/24', '10.0.0.0/8']
所以这里的输出['10.0.0.0/8', '192.168.56.0/24']
是列表中不同子网中的两个顶级超网
为了解决这个问题,我目前正在使用使用 ipaddress python lib,
的实现有没有更好的实现方式!!!! 因为这个问题似乎是在列表中找到多个不同类型的最大值
import ipaddress
inputS = ['172.16.0.0/16' ,'10.10.0.0/16', '10.10.10.10/32', '172.16.1.0/24', '10.10.10.0/24', '172.16.10.10/32', '192.168.56.0/24', '10.0.0.0/8']
inputS = list(set(inputS))
input = []
for each in inputS:
input.append(ipaddress.ip_network(str(each)))
input1 = input
for i in range(len(input)):
for j in range(len(input1)):
if str(input[i]) != str(input1[j]):
if input[i].supernet_of(input1[j]):
input1[j] = input[i]
output = []
for each in input1:
output.append(str(each))
print(list(set(output)))
python 中的 ipaddress 库有一个函数 collapse_addresses。 collapse_addresses 函数应该能够从输入的 ip 地址列表中直接输出超网。
请检查以下代码片段:
>>> import ipaddress
>>> inputS = ['172.16.0.0/16' ,'10.10.0.0/16', '10.10.10.10/32', '172.16.1.0/24', '10.10.10.0/24', '172.16.10.10/32', '192.168.56.0/24', '10.0.0.0/8']
>>> input_ips = [ipaddress.ip_network(x) for x in inputS]
>>> res = ipaddress.collapse_addresses(input_ips)
>>> print([x for x in res])
[IPv4Network('10.0.0.0/8'), IPv4Network('172.16.0.0/16'), IPv4Network('192.168.56.0/24')]