MX Checker em python

Há algum tempo atrás eu escrevi um script para meu amigo philippe para checar se um servidor smtp estava configurado para aceitar relay ou não, era bem simples como você mesmo pode ver neste post, e na ocasião ele me apresentou um site que fazia essa checagem e como eu estava aprendendo python me sugeriu que eu fizesse um script com o retorno parecido com o do site.

Então eu fiz, e aproveitei para colocar em prática o metódo POO de programar, que também havia aprendido a pouco tempo. Bem o código não ficou lá grande coisa, mas faz o prometido hehe.

#!/usr/bin/python
# coding: UTF-8
# MX checker by deadcow [at] archlinux.com.br


import smtplib
from time import time
from sys import argv

class Check_s:
    def __init__(self, daddr = 'Localhost'):
        self.daddr = daddr
        self.smtpconn = smtplib.SMTP()
        self.relay = True
        self.elapsed = 0

    def Bann_s(self):
        try:
            atime = time()
            ret = self.smtpconn.connect(self.daddr)
            atime = time() - atime
            self.elapsed = atime
            out = '%s %s [%.3fms]' %(ret[0], ret[1], atime)
            return out
        except smtplib.SMTPConnectError, erro:
            return erro
        except Exception, erro:
            return erro[1]


    def Helo_s(self):
        try:
            atime = time()
            self.smtpconn.putcmd('HELO','testing.org')
            ret = self.smtpconn.getreply()
            atime = time() - atime
            self.elapsed += atime
            out = '%s %s [%.3f]' %(ret[0], ret[1], atime)
            return out
        except smtplib.SMTPException, erro:
            return erro
        
    def From_s(self):
        try:
            atime = time()
            self.smtpconn.putcmd('MAIL FROM:', '<test@testing.org>')
            ret = self.smtpconn.getreply()
            atime = time() - atime
            self.elapsed += atime
            out = '%s %s [%.3f]' %(ret[0], ret[1], atime)
            return out
        except smtplib.SMTPException, erro:
            return erro

    def To_s(self):
        try:
            atime = time()
            self.smtpconn.putcmd('RCPT TO:', '<test@testing.org>')
            ret = self.smtpconn.getreply()
            atime = time() - atime
            self.elapsed += atime
            out = '%s %s [%.3f]' %(ret[0], ret[1], atime)
            if ret[0] == 550: self.relay = False
            return out
        except smtplib.SMTPException, erro:
            return erro

    def Quit_s(self):
        try:
            atime = time()
            self.smtpconn.putcmd('QUIT')
            ret = self.smtpconn.getreply()
            atime = time() - atime
            self.elapsed += atime
            out = '%s %s [%.3f]' %(ret[0], ret[1], atime)
            return out
        except smtplib.SMTPException, erro:
            return erro

if __name__ == '__main__':

    mxcheck = Check_s(argv[1])

    print 'BANNER:'
    print mxcheck.Bann_s()
    print '\nHELO testing.org:'
    print mxcheck.Helo_s()
    print '\nMAIL FROM: <test@testing.org>:'
    print mxcheck.From_s()
    print '\nRCPT TO: <test@testing.org>:'
    print mxcheck.To_s()
    print '\nQUIT:'
    print mxcheck.Quit_s()
    
    if mxcheck.relay == True:
        print '\nWARNING: This server is open to relay'
    else:
        print '\nOK - This server is not an open relay'

    print 'Transaction time: %.3f' %mxcheck.elapsed


 

1 comentários:

  1. Esta postagem foi removida pelo autor.

    on 09/08/2008 14:15:00  


Postar um comentário