我无法使用ipaddress.collapse_addresses()
方法。
# n is a list of 192.168.0.0/24 networks (1,2,3,4....etc)
def sumnet():
n = nlist()
for net in n:
snet = ipaddress.collapse_addresses(net)
return snet
我只返回原始列表:
Collapsed Networks
[IPv4Network('192.168.0.0/24'), IPv4Network('192.168.1.0/24'),
IPv4Network('192.168.2.0/24'), IPv4Network('192.168.3.0/24'),
IPv4Network('192.168.4.0/24'), IPv4Network('192.168.5.0/24'),
IPv4Network('192.168.6.0/24'), IPv4Network('192.168.7.0/24'),
IPv4Network('192.168.8.0/24')]
答案 0 :(得分:2)
假设您输入的是ipaddress中的IPv4网络列表,例如...
test3.ppt
您想要的输出是
netlist = [ipaddress.IPv4Network('192.168.0.0/24'),
ipaddress.IPv4Network('192.168.1.0/24'),
ipaddress.IPv4Network('192.168.2.0/24'),
ipaddress.IPv4Network('192.168.3.0/24'),
ipaddress.IPv4Network('192.168.4.0/24'),
ipaddress.IPv4Network('192.168.5.0/24'),
ipaddress.IPv4Network('192.168.6.0/24'),
ipaddress.IPv4Network('192.168.7.0/24'),
ipaddress.IPv4Network('192.168.8.0/24')]
所有这些都可以通过...
[IPv4Network('192.168.0.0/21'), IPv4Network('192.168.8.0/24')]
import ipaddress
def sumnet(netlist):
return list(ipaddress.collapse_addresses(netlist))
netlist = [ipaddress.IPv4Network('192.168.0.0/24'),
ipaddress.IPv4Network('192.168.1.0/24'),
ipaddress.IPv4Network('192.168.2.0/24'),
ipaddress.IPv4Network('192.168.3.0/24'),
ipaddress.IPv4Network('192.168.4.0/24'),
ipaddress.IPv4Network('192.168.5.0/24'),
ipaddress.IPv4Network('192.168.6.0/24'),
ipaddress.IPv4Network('192.168.7.0/24'),
ipaddress.IPv4Network('192.168.8.0/24')]
print(sumnet(netlist))
方法实际上接收了完整的地址列表,您不必一一提供ip_addresses。它将为崩溃的网络返回一个生成器,但是您可以将其转换为列表以使其更容易处理。
如果这不是您要完成的任务,请告诉我。
很难理解您的代码应该做什么,因为以下代码段启动了一个for循环,在该循环中,抓取第一个IP地址将其折叠到生成器中,并使用该单个IP地址返回该生成器,而无需查看任何其他IP地址。但是,这似乎与您的问题要求的输出不一致。
collapse_addresses