3

ADSL接続のマシンでSSHを実行しています。このスクリプトを作成して、マシンに新しいIPアドレスが追加されるたびにメールを送信しました。

私はそのマシンにアクセスできません。スクリプトを友人に渡したので、このスクリプトの何が問題になっているのかを理解するためにデバッグを実行できません。現在、大学の接続を使用していますが、静的IPアドレスがあります。スクリプトを実行しても意味がありません。

したがって、スクリプトを改善/修正する方法の提案。無効なIPアドレスを受け取る場合や、IPアドレスが変更される場合がありますが、メールが届きません。この種の自動化には別の方法を使用する必要がありますか?

import urllib
import time
import smtplib

fromaddr = '***@gmail.com'  
toaddrs  = '***@gmail.com'    
ip = ""

username = '****'  
password = '****'  
f = False

def update():
    global ip,f
    #print "sleeping 5 seconds"
    time.sleep(5)
    while not f:
        try:
            f = urllib.urlopen("http://automation.whatismyip.com/n09230945.asp")
        except IOError, e:
            print "no internet !"
            time.sleep(5)

    if not ip and f:
        ip = f.read()
        print "getting the first ip"
        print ip
        sendmail(ip)
        print "mail sent"

    else:
        if f:
            ip2 = f.read()
            #print ip,ip2
            if ip != ip2 and ip and ip2:
                ip = ip2
                print "new ip",ip,"sending mail"
                sendmail(ip)
            else:
                print "ip is the same"
            f = False
    #print ip

def sendmail(ip):
    a = False
    while not a:
        try:
            #just to check if i have internet or not
            a = urllib.urlopen("http://automation.whatismyip.com/n09230945.asp")
            server = smtplib.SMTP('smtp.gmail.com:587')
            server.ehlo()
            server.starttls()
            server.ehlo()
            server.login(username,password)
            server.sendmail(fromaddr, toaddrs, ip)  
            server.quit()
        except IOError, e:
            print "no internet"
            time.sleep(5)
            #sendmail(ip)


print "program started"

while(1):
    update()
4

2 に答える 2

5

サーバーに頻繁にアクセスしてブロックされる可能性があることをお勧めします... http://forum.whatismyip.com/f14/pace-yourself-t6/

time.sleep(5)最初をに変更しますtime.sleep(300)

于 2012-05-03T14:22:59.243 に答える
0

素晴らしいスクリプトをありがとう!これは間違いなく機能します(urlopenデータとしてechoip.comを使用)

import urllib
import time
import smtplib

fromaddr = '***'  
toaddrs  = '***'    
ip = ""

username = '***'  
password = '***'  
f = False

def update():
    global ip,f
    #print "sleeping 5 seconds"
    time.sleep(20)
    while not f:
        try:
            f = urllib.urlopen("http://echoip.com")
        except IOError as e:
            print ("no internet !", e)
            time.sleep(5)

    if not ip and f:
        ip = f.read()
        print "getting the first ip"
        print ip
        sendmail(ip)
        print "mail sent"

    else:
        if f:
            ip2 = f.read()
            #print ip,ip2
            if ip != ip2 and ip and ip2:
                ip = ip2
                print "new ip",ip,"sending mail"
                sendmail(ip)
            else:
                print "ip is the same"
            f = False
    #print ip

def sendmail(ip):
    a = False
    while not a:
        try:
            #just to check if i have internet or not
            a = urllib.urlopen("http://echoip.com")
            server = smtplib.SMTP('smtp.gmail.com:587')
            server.ehlo()
            server.starttls()
            server.ehlo()
            server.login(username,password)
            server.sendmail(fromaddr, toaddrs, ip)  
            server.quit()
        except IOError as e:
            print ("no internet", e)
            time.sleep(10)
            #sendmail(ip)


print "program started"

while(1):
    update()
于 2015-05-11T15:15:19.107 に答える