Python:IP變動發送到郵箱

來源:互聯網
上載者:User

(啊,已經是兩個月前做的東西了,因為這月偷懶沒寫東西,所以在11月底扔一篇出來)
今天主要是分享一個我搗鼓出來的讓使用者自行 遠端控制/以web服務方式 訪問有公網IP地址的機子(大多ADSL使用者有公網IP)的工具。
這個想法起因是偶一個親戚的要訪問他倉庫監控網路攝影機狀態,那個監控裝置在本地開了一個web服務,可以供遠端存取,之前用花生殼作網域名稱綁定動態IP老是失效,火大了,乾脆不用了,因為那邊是電信ADSL接入的,有擷取動態公網IP,所以我想如果做一個工具可以往他郵箱發送那台伺服器的IP就OK了,剛好最近有玩Python,我就把“開發工具”定位到它上面了,這是我第4次碰python,跟之前一樣,成果很快就出來了。
我找了兩段資料,Python擷取本機IP的,還有一個是python發送郵件的,然後搗鼓一下就變成:當本機IP變動時發送IP到指定郵箱,非常容易實現,解釋一下為什麼要有這個“IP變動時發送”,因為電信ADSL擷取的公網IP是隔N天會變的(N=?,貌似系統重啟也會變),定時發送會比較蠢(會有無效郵件,IP沒變發來幹嘛),所以做個IP檢測咯~~

下面請看代碼,包含兩個檔案,一個是設定檔config.py,還有一個是主程式部分sendIP.py

config.py: 

#coding=utf-8
smtpServer='smtp.126.com' #郵件發送帳戶的smtp伺服器位址
smtpPort='25' #郵件發送帳戶的smtp伺服器傳送埠
smtpUser='XXXX@126.com' #郵件發送帳戶名稱
smtpPwd='XXXXXX' #郵件發送帳戶密碼,我這裡打X號樣本,但老兄得填真的
sendTo='XXXX@qq.com' #接收郵箱地址

包含一個郵件發送帳戶,和一個接收郵箱地址(這個就是上面提到的"指定郵箱"),當然,兩個可以一樣,我這裡以126郵箱帳戶發送給一個QQ郵箱為例,請自便。

sendIP.py:

#coding=utf-8
import smtplib,config,email,sys,socket,threading
from email.Message import Message

def connect():
    try:
        server=smtplib.SMTP(config.smtpServer,config.smtpPort)
        server.ehlo()
        server.login(config.smtpUser,config.smtpPwd)
        return server
    except Exception:
        print 'connect smtp server failed!'
    
def sendmessage(server,to,subj,content):
    msg = Message()
    msg['Mime-Version']='1.0'
    msg['From']    = config.smtpUser
    msg['To']      = to
    msg['Subject'] = subj
    msg.set_payload(content)
    try:    
        failed = server.sendmail(config.smtpUser,to,str(msg))
    except Exception ,ex:
        print Exception,ex
        print 'Error - send failed'
    else:
        print 'send succeed!'

#每隔10s檢查一次IP,間隔時間可以適當調大一點
def checkIP():
    global text
    print text
    ipnow=str(socket.gethostbyname_ex(socket.gethostname()))
    print ipnow
    if  text!=ipnow:
        text=ipnow
        server=connect()
        sendmessage(server,to,subj,text)
    t = threading.Timer(10.0, checkIP)
    t.start()
        
if __name__=="__main__":
    to=config.sendTo
    subj='ip changed' 
    text = str(socket.gethostbyname_ex(socket.gethostname())) #這個就是擷取本機IP的
    server=connect()
    sendmessage(server,to,subj,text)
    t = threading.Timer(10.0, checkIP)
    t.start()

上面擷取本機IP是全部IP,當然你也可以寫幾行代碼把公網的分離出來~~

 

之後讓sendIP.py在開機運行就行了(記得先裝python運行環境),只要把遠端桌面是允許狀態,隨時可以遠端控制。
收工!(11月過了-_-!)

(測試環境:Windows XP SP3,Python 2.52)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.