In seguito potete trovare la seconda versione dello script “Spamhaus Drop List Alerter” pubblicato alcuni giorni fa. Questo aggiornamento corregge un accesso negato nel download delle liste.
Queste sono le modifiche apportate rispetto alla prima versione:
def download(self): try: opener = urllib2.build_opener() opener.addheaders = [('User-agent', 'Mozilla/5.0')] sock = opener.open("http://www.spamhaus.org/drop/drop.lasso") droplist = sock.read() sock.close() self.savefile(droplist) return 1 except: return 0
Qui di seguito, invece, la nuova versione completa dello script:
#!/usr/bin/python import urllib2 import os import re import smtplib class DROP: global netmask netmask = {"/0" : "0.0.0.0","/1" : "128.0.0.0","/2" : "192.0.0.0","/3" : "224.0.0.0","/4" : "240.0.0.0","/5" : "248.0.0.0","/6" : "252.0.0.0","/7" : "254.0.0.0","/8" : "255.0.0.0","/9" : "255.128.0.0","/10" : "255.192.0.0","/11" : "255.224.0.0","/12" : "255.240.0.0","/13" : "255.248.0.0","/14" : "255.252.0.0","/15" : "255.254.0.0","/16" : "255.255.0.0","/17" : "255.255.128.0","/18" : "255.255.192.0","/19" : "255.255.224.0","/20" : "255.255.240.0","/21" : "255.255.248.0","/22" : "255.255.252.0","/23" : "255.255.254.0","/24" : "255.255.255.0","/25" : "255.255.255.128","/26" : "255.255.255.192","/27" : "255.255.255.224","/28" : "255.255.255.240","/29" : "255.255.255.248","/30" : "255.255.255.252","/31" : "255.255.255.254","/32" : "255.255.255.255" } def savefile(self, data): dlist = open("droplist.new", "w") dlist.write(data) dlist.close() return 1 def readfile(self,name): list = open(name, "r") file = list.read() list.close() return file def download(self): try: opener = urllib2.build_opener() opener.addheaders = [('User-agent', 'Mozilla/5.0')] sock = opener.open("http://www.spamhaus.org/drop/drop.lasso") droplist = sock.read() sock.close() self.savefile(droplist) return 1 except: return 0 def savebckup(self, data): dlist = open("droplist.bkp", "w") dlist.write(data) dlist.close() return 1 def prepare(self, data): matcher = re.compile('\d+\.\d+\.\d+\.\d+.\d+') matched = matcher.findall(data) #print matched return matched def route2insert(self, newlist,oldlist): com = filter( lambda x: x in oldlist, newlist) return filter( lambda x: x not in com, newlist) def route2delete(self, newlist,oldlist): com = filter( lambda x: x in oldlist, newlist) return filter( lambda x: x not in com, oldlist) def sendmail(self, to, msg): fromaddr = "[email protected]" toaddrs = to subject = "SpamHaus DropList Automated Alert" headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (fromaddr, toaddrs, subject) message = headers + msg server = smtplib.SMTP('localhost') #debug level #server.set_debuglevel(1) server.sendmail(fromaddr, toaddrs, message) server.quit() def sendmailauth(self, to, msg, login, passwd): fromaddr = "[email protected]" toaddrs = to subject = "SpamHaus DropList Automated Alert" headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (fromaddr, toaddrs, subject) message = headers + msg server = smtplib.SMTP('localhost') #debug level #server.set_debuglevel(1) server.login(login,passwd) server.sendmail(fromaddr, toaddrs, message) server.quit() def rotteadd(self, data): strrotte = "" for i in data: matcher = re.compile('\/\d+') matched = matcher.search(i) nmask = netmask[matched.group()] matcher = re.compile('\d+\.\d+\.\d+\.\d+') matched = matcher.search(i) strrotte += "ip route " + matched.group() + " " + nmask + " Null0\n" return strrotte def rottedel(self, data): strrotte = "" for i in data: matcher = re.compile('\/\d+') matched = matcher.search(i) nmask = netmask[matched.group()] matcher = re.compile('\d+\.\d+\.\d+\.\d+') matched = matcher.search(i) strrotte += "no ip route " + matched.group() + " " + nmask + " Null0\n" return strrotte null0 = DROP() null0.download() if not os.path.isfile('droplist.bkp'): null0.savebckup("") newlist = null0.prepare(null0.readfile('droplist.new')) oldlist = null0.prepare(null0.readfile('droplist.bkp')) r2in = null0.route2insert(newlist,oldlist) r2del = null0.route2delete(newlist,oldlist) mailbody = null0.rotteadd(r2in) + null0.rottedel(r2del) #print mailbody if not mailbody: mailbody = "Nessuna modifica alla lista" null0.sendmail("yourmail@yourdomain", mailbody) else: null0.sendmail("yourmail@yourdomain", mailbody) null0.savebckup(null0.readfile('droplist.new'))