【问题标题】:How to remove network addresses from a list if they are a subnet of another network如果它们是另一个网络的子网,如何从列表中删除网络地址
【发布时间】:2019-12-08 10:28:04
【问题描述】:

在从 csv 文件创建 ipaddress/CIDR 列表,将 ipaddresses 转换为网络地址,然后通过从列表中创建一个集合(python 3.7)来消除重复项后,我迭代并消除了所有属于另一个子网的子网 subnets_of()子网,保留汇总或超网地址。我使用 ipaddress 模块来完成这项工作。问题是,如果将子网与自身进行比较,它仍然算作子网。例如,

a = ipaddress.ip_network('192.168.0.0/24')
b = ipaddress.ip_network('192.168.0.0/24')
b.subnet_of(a)
True

所以即使我的列表中有 192.168.0.0/23,仍然会添加 /24,因为所有地址都与所有地址进行比较。有没有更好的办法来处理这种情况?

我已经尝试从我的工作列表中删除子网,这样它就不会被再次迭代,没有运气。

没有错误消息。我只是得到一个包含在我列表中更大子网中的子网。这会留下一个不必要的条目。

【问题讨论】:

    标签: python-3.x subnet


    【解决方案1】:

    您是否尝试过仅删除 / 之后的所有内容?

    【讨论】:

    • 这将否定 ipaddress 模块确定网络前缀长度的能力,无法确定子网成员资格。
    猜你喜欢
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2018-08-16
    • 2014-02-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多