aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorGravatar jesopo2019-12-12 13:14:14 +0000
committerGravatar jesopo2019-12-12 13:14:14 +0000
commit57760a4ad76e5b224cafe1be38e6c0bb14f99bf3 (patch)
tree92619de433232085485f381463b359fd8aff3214 /modules
parentv1.17.0-rc1 release (diff)
signature
add dnsbl.py
Diffstat (limited to 'modules')
-rw-r--r--modules/dnsbl.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/modules/dnsbl.py b/modules/dnsbl.py
new file mode 100644
index 00000000..d2e3135d
--- /dev/null
+++ b/modules/dnsbl.py
@@ -0,0 +1,50 @@
+import ipaddress
+from src import ModuleManager, utils
+import dns.resolver
+
+DEFAULT_LISTS = [
+ "rbl.efnetrbl.org",
+ "zen.spamhaus.org"
+]
+
+class Module(ModuleManager.BaseModule):
+ @utils.hook("received.command.dnsbl")
+ def dnsbl(self, event):
+ args = event["args_split"]
+
+ lists = []
+ for i, arg in reversed(list(enumerate(args))):
+ if arg[0] == "@":
+ lists.insert(args.pop(i))
+ lists = lists or DEFAULT_LISTS
+
+ address = args[0]
+ failed = self._check_lists(lists, address)
+ if failed:
+ event["stderr"].write("%s failed for lists: %s" %
+ (address, ", ".join(failed)))
+ else:
+ event["stdout"].write("%s not found in blacklists" % address)
+
+ def _check_lists(self, lists, address):
+ address_obj = ipaddress.ip_address(address)
+
+ if address_obj.version == 6:
+ address = reversed(address_obj.exploded.replace(":", ""))
+ else:
+ address = reversed(address.split("."))
+ address = ".".join(address)
+
+ failed = []
+ for list in lists:
+ if not self._check_list(list, address):
+ failed.append(list)
+ return failed
+
+ def _check_list(self, list, address):
+ list_address = "%s.%s" % (address, list)
+ try:
+ dns.resolver.query(list_address)
+ except dns.resolver.NXDOMAIN:
+ return False
+ return True