41 lines
1 KiB
Python
41 lines
1 KiB
Python
|
import collections
|
||
|
|
||
|
class DNSBL(object):
|
||
|
def __init__(self, hostname=None):
|
||
|
if not hostname == None:
|
||
|
self.hostname = hostname
|
||
|
|
||
|
def process(self, result: str):
|
||
|
return "unknown"
|
||
|
|
||
|
class ZenSpamhaus(DNSBL):
|
||
|
hostname = "zen.spamhaus.org"
|
||
|
def process(self, result):
|
||
|
result = result.rsplit(".", 1)[1]
|
||
|
if result in ["2", "3", "9"]:
|
||
|
return "spam"
|
||
|
elif result in ["4", "5", "6", "7"]:
|
||
|
return "exploits"
|
||
|
class EFNetRBL(DNSBL):
|
||
|
hostname = "rbl.efnetrbl.org"
|
||
|
SPAMTRAP = ["2", "3"]
|
||
|
def process(self, result):
|
||
|
result = result.rsplit(".", 1)[1]
|
||
|
if result == "1":
|
||
|
return "proxy"
|
||
|
elif result in self.SPAMTRAP:
|
||
|
return "spamtap"
|
||
|
elif result == "4":
|
||
|
return "tor"
|
||
|
elif result == "5":
|
||
|
return "flooding"
|
||
|
|
||
|
DEFAULT_LISTS = [
|
||
|
ZenSpamhaus(),
|
||
|
EFNetRBL()
|
||
|
]
|
||
|
|
||
|
def default_lists():
|
||
|
return collections.OrderedDict(
|
||
|
(dnsbl.hostname, dnsbl) for dnsbl in DEFAULT_LISTS)
|