试图用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
吗?!如果有别的办法,请!你知道吗
谢谢你的帮助!:)
我不是百分之百清楚pytricia是如何处理
in
操作符的,但是。。。你知道吗如果
pytricia
希望看到一个子网是否存在于另一个子网中,那么。。。请注意,0.0.0.0/0
是四元零路由,本质上是包含所有其他子网的子网。你知道吗因此,如果
0.0.0.0/0
在prefix_list
中,并且pytricia
正在检查给定子网(即10.0.0.0/8
)是否完全包含在pytricia
prefix_list
中的任何子网中,那么可以推测,包含四元零路由的任何前缀列表将自动包含所有其他子网,并且将始终返回True
。你知道吗例如:
如果我创建一个较小的
prefix_list
而不使用四元零路由,然后检查给定的子网(即172.16.0.0/13
)是否完全包含在前缀列表中,那么我们会得到True
,因为给定的子网包含在172.16.0.0/12
中。你知道吗相关问题 更多 >
编程相关推荐