You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
791 B
Python
29 lines
791 B
Python
import ipaddress
|
|
|
|
import dns.name
|
|
|
|
|
|
class FilterModule:
|
|
def filters(self):
|
|
return {
|
|
"add_origin": add_origin,
|
|
"add_origin_keys": add_origin_keys,
|
|
"ip_filter": ip_filter,
|
|
}
|
|
|
|
|
|
def ip_filter(addresses, networks):
|
|
if isinstance(addresses, dict):
|
|
return {k: ip_filter(v, networks) for k, v in addresses.items()}
|
|
ip_networks = [ipaddress.ip_network(n) for n in networks]
|
|
ip_addresses = [ipaddress.ip_address(a) for a in addresses]
|
|
return [str(a) for a in ip_addresses if any(a in n for n in ip_networks)]
|
|
|
|
|
|
def add_origin(name, origin="."):
|
|
return dns.name.from_text(name, dns.name.from_text(origin)).to_text()
|
|
|
|
|
|
def add_origin_keys(dct, origin="."):
|
|
return {add_origin(k, origin): v for k, v in dct.items()}
|