查找减法 IPSet

Find subtract IPSet

我希望能够在 python 中使用 netaddr 获得 ip 过滤器,但我不知道如何减去两个 ip 以在 CIDR 范围内创建。相反,我得到了两个独立的范围。

from netaddr import *

allnets = IPSet(['0.0.0.0/0'])
ip = IPSet(['8.8.8.8', '8.8.8.4'])

for ips in ip:
     print allnets - ip

我想要一个过滤两个 ip 的 IPset 对象,而不是过滤每个 ip 的两组范围。

您要搜索的表达式是allnets - ip。产生 "one IPset object that filters both ips".

考虑这个程序:

from netaddr import *

allnets = IPSet(['0.0.0.0/0'])
ip = IPSet(['8.8.8.8', '8.8.8.4'])
filtered = allnets - ip

assert '8.8.8.8' not in filtered
assert '8.8.8.4' not in filtered
assert '8.8.8.7' in filtered
assert '192.0.2.17' in filtered
assert '203.0.113.1' in filtered