from netaddr import IPNetwork, IPSet def ip_rev(orig, rev, net): if orig.isdisjoint(IPSet(net)): rev.add(net) return elif orig.issuperset(IPSet(net)): return else: for net in net.subnet(net.prefixlen + 1): ip_rev(orig, rev, net) def ip_net_rev(addresses, version=None): orig = IPSet(addresses) rev = IPSet() if version in [None, 4]: ip_rev(orig, rev, IPNetwork('0.0.0.0/0')) if version in [None, 6]: ip_rev(orig, rev, IPNetwork('::/0')) return [str(net) for net in rev.iter_cidrs()] class FilterModule(object): def filters(self): return {'ip_net_rev': ip_net_rev} if __name__ == '__main__': import sys for ip in ip_net_rev(sys.argv[1:]): print(ip)