首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

用python 监控公网IP并发送到信箱里

2012-12-24 
用python 监控公网IP并发送到邮箱里之前写在新浪博客里了,今天把它换到ITEye上来,直接copy过来。买了VPS,已

用python 监控公网IP并发送到邮箱里

之前写在新浪博客里了,今天把它换到ITEye上来,直接copy过来。


买了VPS,已经不需要这么做了,不过我记忆力超差,我只能靠烂笔头儿,还是记录一下的比较好。?

?

----------------------------------------------------------------

来源: 我的新浪博客?

时间:?2011-03-22?

?

自己家中的电脑有时候需要做为服务器,以便为了在公司用 或 给认识的人用。
原因..........?用python 监控公网IP并发送到信箱里?
自己在花生壳申请了动态域名,但偶尔它也抽风,所以写了这个脚本:
???????????? 定时得到网络的公网IP? -> 发送到自己的邮箱
刚开始看了点python, 算练手了,用python 监控公网IP并发送到信箱里

代码如下:



#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:????? heidanine
# file:??????? checkWapIp.py
# modified:??2011/03/20 01:40
#
###########################################
# 检测外网的Ip,发送到指定邮箱
###########################################
# 初期设置:
#????1. 填写 myMail -> 你的邮箱哦
#????2. 填写 mySmtp ->?host 你自己的smtp服务器。 user/pwd 用户名和密码
#????3. 填写 testUrlParams -> 这个除了保留的地址,你可以多找几个,防止哪个网站不好用了。
# 测试脚本可否执行:
#????python checkWanIp.py
#????如果没什么问题就可以把这个脚本的执行交给cron了。
# 配置cron(需要root权限),每10分钟检测一次,可自己按习惯定。
#? ? crontab -e
#??? 输入:
# ? ? ? ? */10 * * * *? python?checkWapIp.py
#

import?os
import?time
import?httplib
import?urllib
import?urllib2
import?smtplib
from?email.mime.text?import?MIMEText

################
## 我发邮件的邮箱地址
myMail =?"XXXXXXXX@126.com"
################
# 先发给自己就行了,想发给别人再加就可以了
toMailList= [myMail\
????????????#,'111@163.com'\
]
################
# 发邮件的SMTP服务器设置
mySmtp = {"host":?"smtp.XXX.com"\
???? ,"user":?"XXXXXXXX"\
???? ,"pwd":?"XXXXXXXX"\
}

################
#检测外网IP的网站列表
testUrlParams = [{'domain':?'ifconfig.me',?'uri':?'/ip'}\
????????????????,{'domain':?'icanhazip.com',?'uri':?''}\
????????????????]
# log文件名
logFileName =?'checkWanIp.log'
# log初始内容
logList = ['']
# 保存上次IP信息的文件
lastInfoFileName =?'.lastInfo'

def?getWanIpInfo():
????'''
????取得外网IP
????'''
????ipInfo = ['']
????for?urlParam?in?testUrlParams:
????????ipInfo.append("\r\n----------")
????????ipInfo.append("\r\nTest Server :?http://"?+ urlParam['domain'] + urlParam['uri'])
????????
????????ip = getRequestIpInfo(urlParam)
????????
????????if?ip?is?None:
????????????ipInfo.append("\r\nTest Fail!!!!!!!!!!!!!!!!!")
????????????ipInfo.append("\r\n----------")
????????else:
????????????ipInfo.append("\r\nTest OK!")
????????????ipInfo.append("\r\nResult:?\r\n")
????????????ipInfo.append(ip)
????????????ipInfo.append("\r\n----------")
????????????return?"".join(ipInfo)

def?getRequestIpInfo(urlParam):
????'''
????从指定的测试IP的网站得到当前电脑所在网络的外网IP
????param['domain'] : 域名 (用httplib这个包访问不要加"http://")
????param['uri'] : URI
????'''
????global?logList
????ip =?None
????try:
????????con = httplib.HTTPConnection(urlParam['domain'])
????????con.request('GET', urlParam['uri'])
????????res = con.getresponse()
????????if?res.status ==?200?:
????????????ip = res.read()
????????con.close()
????except?Exception, e:
????????logList.append(str(e))
????return?ip

def?sendMail(subject, info):
????'''
????发送邮件到指定的邮箱
????subject: 主题
????info:??邮件内容
????'''
????global?logList
????msg = MIMEText(info)
????msg['Subject'] = subject
????msg['From'] = myMail
????msg['To'] =?";".join(toMailList)
????
????try:
????????s = smtplib.SMTP();
????????s.connect(mySmtp['host'])
????????s.login(mySmtp['user'], mySmtp['pwd'])
????????s.sendmail(myMail, toMailList, msg.as_string())
????????s.close()
????????return?True
????except?Exception, e:
????????logList.append(str(e))
????????return?False

def?readFile(fileName):
????'''
????读文件内容
????'''
????global?logList
????try:??
????????# 打开文件读取文件内容
????????f =?open(fileName,?'r')
????????try:
????????????return?f.read()
????????finally:
????????????f.close()
????except?IOError:
????????logList.append("\r\n"?+ fileName +?" - Can't open the file! Your maybe first run the script, or confirm the Read permission!")
????????return?None

def?writeFile(fileName,?str):
????return?writeFileByMode(fileName ,?str,?'w')?# 追加模式

def?writeLog(str):
????'''
????写Log文件
????'''
????print?str
????return?writeFileByMode(logFileName ,str,?'a')?# 追加模式

def?writeFileByMode(fileName,?str, mode):
????'''
????写文件内容
????'''
????global?logList
????if?mode?is?None:
????????mode =?'w'?# 默认写模式
????try:
????????# 写入文件内容
????????f=?open(fileName, mode)
????????try:
????????????f.write(str)
????????????return?True
????????finally:
????????????f.close()
????except?IOError:
????????logList.append("\r\n"?+ fileName +?" - Can't write the file! Please confirm the write permission")
????????return?False

if?__name__ ==?'__main__':
????try:
????????# 从网站上取得IP
????????ipInfo = getWanIpInfo()
????????logList.append(ipInfo)
????????#读取上次保存的内容
????????lastInfo = readFile(lastInfoFileName)
????????# 判断和上次取得的内容是否有变化
????????if?lastInfo == ipInfo:
????????????logList.append("\r\n\r\n:) IP is not change!")
????????????print?"".join(logList)
????????else:
????????????# 把取得的内容存入文件中,下次用来进行比较
????????????writeFile(lastInfoFileName, ipInfo)
????????????logList.append("\r\n\r\nWrite new IP to '"?+ lastInfoFileName +?"'")
????????????# 取得开始时间字符串
????????????timeStr = time.strftime('%Y-%m-%-d %H:%M:%S', time.localtime(time.time()))
????????????# 设置邮件主题
????????????subject =?'[Get IP]host:buhe9('?+ timeStr +?')'
????????????# 发送到指定邮箱
????????????sendMail(subject, ipInfo)
????????????#写入log
????????????logList.append("\r\n?Subject: "?+ subject)
????????????logList.append("\r\n?Send mail ok!")
????????????logList.append("\r\n■■■■■■■■■■■■■■■■■■■■■■■■■■■")
????????????writeLog("".join(logList))
????except?Exception, e:
????????writeLog(str(e))

热点排行