使用python netaddr cidr_merge汇总相邻子网

68de4m5k  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(103)

我的IP网络列表不会与netaddr.cidr_merge合并,即使某些IP网络相邻。我是否做错了什么?

>>> from netaddr import IPNetwork, cidr_merge
>>> iplist = [
         IPNetwork('10.105.205.8/29'), 
         IPNetwork('10.105.205.16/28'), 
         IPNetwork('10.105.205.32/27'), 
         IPNetwork('10.105.205.64/26'), 
         IPNetwork('10.105.205.128/26'),
         IPNetwork('10.105.205.192/28'),
         IPNetwork('10.105.205.208/29'),
         IPNetwork('10.105.206.48/28'),
         IPNetwork('10.105.206.80/28')
    ]
>>> summary = cidr_merge(iplist)
>>> summary == iplist
    True

我在Mac OSX 10.8.5上使用Python 3.3.4和netaddr 7.12。

0lvr5msh

0lvr5msh1#

@黄昏-
谢谢您的回复。我同意第一部分,但第二部分...我想我知道您的意思,但它不是100%准确。例如,如果我从上面的编辑列表,并添加10.105.205.0/29。子网将总结为/25。是的,它们必须是2的幂,但整个子网的所有部分必须在netaddr总结之前存在,而不管它们是否具有相等的大小。

iplist =[
        IPNetwork('10.105.205.8/29'), 
        IPNetwork('10.105.205.16/28'), 
        IPNetwork('10.105.205.32/27'), 
        IPNetwork('10.105.205.64/26'),
        ]
    >>> iplist.append(IPNetwork('10.105.205.0/29'))
    >>> netaddr.cidr_merge(iplist)
        [IPNetwork('10.105.205.0/25')]
dhxwm5r4

dhxwm5r42#

netaddr在此处工作正常。无法总结所有相邻子网。
例如,考虑子网10.255.255.0/2411.0.0.0/24。当它们相邻时(第一个子网以10.255.255.255结束,第二个子网以11.0.0.0开始),它们不能被总结,因为它们跨越的边界比这两个网络中的任何一个都大。
此外,无论如何对齐,两个相邻的网络只有在大小相等时才能连接在一起。大小不匹配的网络不能合并到一个范围内,因为合并后的网络大小不是2的幂。

相关问题