Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.lang.python > #7621

Re: ip Pubblico

Path csiph.com!aioe.org!.POSTED!not-for-mail
From Claudio_F <clau.fin@tin.it>
Newsgroups it.comp.lang.python
Subject Re: ip Pubblico
Date Sat, 19 Mar 2016 21:12:09 +0100
Organization Aioe.org NNTP Server
Lines 103
Message-ID <nckbqo$ek3$1@gioia.aioe.org> (permalink)
References <jfPGy.42660$pt.19549@tornado.fastwebnet.it>
NNTP-Posting-Host /gHgHMU4FDWiGDaTTm1JBQ.user.gioia.aioe.org
Mime-Version 1.0
Content-Type text/plain; charset=iso-8859-15; format=flowed
Content-Transfer-Encoding 8bit
X-Complaints-To abuse@aioe.org
User-Agent Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Thunderbird/38.6.0
X-Notice Filtered by postfilter v. 0.8.2
Xref csiph.com it.comp.lang.python:7621

Show key headers only | View raw


Il 18/03/2016 09:46, Smith ha scritto:
> Ciao a tutti,
> ho questo script e vorrei suddividerlo in funzioni per renderlo più
> sintetico possibile.


Suddividerlo in funzioni si puo`, ma il codice (a parte gli errori che 
contiene) non e` minimamente in grado di far fronte alle seguenti 
situazioni:

- server eco IP non raggiungibile
- dati ricevuti non validi
- server smtp non raggiungibile

Poi, oltre a non crashare, in caso di anomalia non deve inviare mail a 
raffica. Un esempio puo` essere il seguente:


#!/usr/bin/python3
#---------------------------------------------------------------------
import urllib.request, smtplib, time
#---------------------------------------------------------------------
SMTP = 'smtp.gmail.com', 465
DESTINATARIO = '...email_destinatario...'
MITTENTE = '...email_mittente...'
USERNAME = '...username...'
PASSWORD = '...password...'
ECHOADDR = '...addr_ip_server...'
ATTESA = 600
#---------------------------------------------------------------------
class ErrIP(Exception): pass
class ErrMail(Exception): pass
#---------------------------------------------------------------------
def valid_ip(x):
     x = x.split('.')
     return (len(x) == 4) and all(z.isdecimal() for z in x)
#---------------------------------------------------------------------
def retrive_ip(addr):
     try:
         d = urllib.request.urlopen(addr).read()
         d = d.decode('utf-8').strip()
         if not valid_ip(d):  raise ErrIP()
         return d
     except:
         raise ErrIP('Errore recupero IP!')
#---------------------------------------------------------------------
def send_mail(smtp, username, password,
               mittente, destinatario, oggetto, testo):
     try:
         server = smtplib.SMTP_SSL(*smtp)
         server.ehlo()
         server.login(username, password)
         header  = 'From: %s\n' % mittente
         header += 'To: %s\n' % destinatario
         header += 'Subject: %s\n\n' % oggetto
         msg = header + testo
         server.sendmail(mittente, destinatario, msg)
         server.quit()
     except:
         raise ErrMail('Fallito invio email!')
#---------------------------------------------------------------------
def main():
     ip = ''
     err_ip = False
     count = 0
     while True:
         #---------------------------------------------------------
         try:
             count += 1
             print('**********************************')
             print('Controllo n. ', count)
             read_ip = retrive_ip(ECHOADDR)
             if err_ip:
                 ip = ''
                 err_ip = False
             if read_ip == ip:
                 print('Indirizzo IP assegnato :', ip)
             else:
                 print('Rilevato nuovo IP :', read_ip)
                 oggetto = testo = 'Notifica IP : %s' % read_ip
                 send_mail(SMTP, USERNAME, PASSWORD, MITTENTE,
                           DESTINATARIO, oggetto, testo)
                 ip = read_ip
         #---------------------------------------------------------
         except ErrIP as msg:
             try:
                 print(msg)
                 if not err_ip:
                     msg = 'Notifica errore : ' + str(msg)
                     send_mail(SMTP, USERNAME, PASSWORD, MITTENTE,
                               DESTINATARIO, msg, msg)
                     err_ip = True
             except ErrMail as msg:
                 print(msg)
         #---------------------------------------------------------
         except ErrMail as msg:
             print(msg)
         #---------------------------------------------------------
         finally:
             time.sleep(ATTESA)
#---------------------------------------------------------------------
main()

Back to it.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

ip Pubblico Smith <smith@a-team.it> - 2016-03-18 09:46 +0100
  Re: ip Pubblico Max_Adamo <maxadamo@usenet.cnntp.org> - 2016-03-19 16:56 +0000
    Re: ip Pubblico Max_Adamo <maxadamo@usenet.cnntp.org> - 2016-03-19 20:35 +0000
  Re: ip Pubblico Claudio_F <clau.fin@tin.it> - 2016-03-19 21:12 +0100
    Re: ip Pubblico Max_Adamo <maxadamo@usenet.cnntp.org> - 2016-03-19 20:44 +0000
      Re: ip Pubblico Claudio_F <clau.fin@tin.it> - 2016-03-19 22:32 +0100
    Re: ip Pubblico Smith <smith@a-team.it> - 2016-03-22 09:17 +0100

csiph-web