使用Python ipaddress模块​​使IP网络崩溃

时间:2019-08-06 19:45:04

标签: python-3.x collapse subnet

我无法使用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')]

1 个答案:

答案 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