使用pytricia、ipaddress或任何其他库在Python中表示ip前缀列表

2024-05-19 12:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

试图用pytricia或ip address在python中表示ip前缀列表,但是在检查前缀列表中是否存在前缀时,这两种方法都不能正常工作

ip prefix-list PFXLST seq 10 permit 0.0.0.0/0
ip prefix-list PFXLST seq 20 permit 172.16.0.0/12
ip prefix-list PFXLST seq 30 permit 192.168.0.0/16

像这样陈述和反对。。。你知道吗

>>> from ipaddress import ip_network
>>> from pytricia import PyTricia
>>>
>>> prefix_list = PyTricia()
>>> [prefix_list.insert(subnet, "permit") for subnet in ["0.0.0.0/0", "172.16.0.0/12", "192.168.0.0/16"]]
[None, None, None]
>>> ip_network("10.0.0.0/8") in prefix_list
True

另一方面

>>> [prefix_list.insert(subnet, "permit") for subnet in ["172.16.0.0/12", "192.168.0.0/16"]]
[None, None]
>>> ip_network("10.0.0.0/8") in prefix_list
False

知道为什么条件在第一种情况下返回True吗?!如果有别的办法,请!你知道吗

谢谢你的帮助!:)


Tags: infromimportipnone列表prefixnetwork
1条回答
网友
1楼 · 发布于 2024-05-19 12:04:22

我不是百分之百清楚pytricia是如何处理in操作符的,但是。。。你知道吗

如果pytricia希望看到一个子网是否存在于另一个子网中,那么。。。请注意,0.0.0.0/0是四元零路由,本质上是包含所有其他子网的子网。你知道吗

因此,如果0.0.0.0/0prefix_list中,并且pytricia正在检查给定子网(即10.0.0.0/8)是否完全包含在pytriciaprefix_list中的任何子网中,那么可以推测,包含四元零路由的任何前缀列表将自动包含所有其他子网,并且将始终返回True。你知道吗

例如:

如果我创建一个较小的prefix_list而不使用四元零路由,然后检查给定的子网(即172.16.0.0/13)是否完全包含在前缀列表中,那么我们会得到True,因为给定的子网包含在172.16.0.0/12中。你知道吗

>>> for subnet in ["172.16.0.0/12", "192.168.0.0/16"]:
    prefix_list.insert(subnet, "permit")

>>> ip_network("172.16.0.0/13") in prefix_list
True

相关问题 更多 >

    热门问题