-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdnsbl.py
67 lines (60 loc) · 1.83 KB
/
dnsbl.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env python
import gevent
from gevent import socket
import socket
DNSBL_servers = [
'cbl.abuseat.org',
'zen.spamhaus.org',
'bogons.cymru.com',
'bl.spamcop.net',
'aspews.ext.sorbs.net',
'b.barracudacentral.org',
# 'blacklist.woody.ch',
# 'combined.abuse.ch',
# 'dnsbl.ahbl.org',
# 'dnsbl.inps.de',
# 'dnsbl.njabl.org',
# 'dnsbl.sorbs.net',
# 'drone.abuse.ch',
# 'duinv.aupads.org',
# 'http.dnsbl.sorbs.net'
# 'ips.backscatterer.org',
# 'misc.dnsbl.sorbs.net',
# 'orvedb.aupads.org',
# 'pbl.spamhaus.org',
# 'sbl.spamhaus.org',
# 'short.rbl.jp',
# 'smtp.dnsbl.sorbs.net',
# 'socks.dnsbl.sorbs.net',
# 'spam.abuse.ch',
# 'spam.dnsbl.sorbs.net',
# 'spamrbl.imp.ch',
# 'web.dnsbl.sorbs.net',
# 'wormrbl.imp.ch',
# 'xbl.spamhaus.org',
]
class DNSBL_check():
"""A DNSBL class for checking existance of ip in DNSBL database."""
def __init__(self, ip=None,timeout=3):
self.ip = ip
self.dnsbl_servers = DNSBL_servers
self.timeout = timeout
def form_query(self, dnsbl_server):
reversed_ip = '.'.join(reversed(self.ip.split('.')))
return '{reversed_ip}.{server}.'.format(reversed_ip=reversed_ip, server=dnsbl_server)
def query(self, link):
try:
result = socket.gethostbyname(self.form_query(link))
except Exception:
result = False
return link, result
def check(self):
results = []
dnsbl_checks = [gevent.spawn(self.query, server_link) for server_link in self.dnsbl_servers]
gevent.joinall(dnsbl_checks, self.timeout)
for item in dnsbl_checks:
if item.successful():
results.append(item.value)
else:
results.append((item.args[0], None))
return results