1. 发布自己的公网IP(更新版)
之前的在这里
http://wiki.woodpecker.org.cn/moin/nickcheng/2007-02-02
这次做了一些更新, 先看代码
#coding=utf-8 import urllib import re import libgmail import time import os import sys # 基本配置 url = 'http://uid:[email protected]/status.htm' # 路由器管理界面中有公网IP的页面 gmailUID = '[email protected]' # gmail帐号 gmailPWD = '123456' # gmail密码 mailtoAddr = '[email protected]' # 发送邮件的目地方地址 mailSubject = 'HOME IP' # 邮件标题 mailPostfix = '\nGetPublicIPNew.py b20070308' # 邮件正文的后缀 logFileName = 'IP.ini' # 本地保存IP地址的文件的文件名 # Get the page content # 从路由器的管理界面获取有公网IP页面的源码 data = urllib.urlopen(url) pageContent = data.read() # Filter & Get the IP # 从网页源码中过滤出IP地址 begin = pageContent.find('IP 地址', 3000)+21 end = pageContent.find('&', begin) IP = pageContent[begin: end - 1] print 'New IP: ' + IP ## 判别IP是否已经发送过邮件 lastIP = '' # 如果存在本地文件, 则读取本地文件中保存的上次IP地址 if os.path.exists(logFileName): print 'The file %s is Exist!' % logFileName rFile = open(logFileName) lastIP = rFile.readline() rFile.close() # 判断两次IP地址是否一致, 如果一致, 则不发送邮件, 程序结束 print 'Old IP: ' + lastIP if IP == lastIP: sys.exit() ## 准备发送邮件 print "It's a brand new IP" print "Sending mail......" # Get current time # 获取当前时间 t = time.localtime() datetime = "-".join([str(a) for a in t[:3]]) + ' ' + ":".join([str(a) for a in t[3:6]]) # Generate content # 生成要发送邮件的文本 content = IP + ' - ' + datetime content += mailPostfix # Send mail # 发送邮件 ga = libgmail.GmailAccount(gmailUID, gmailPWD) gcm = libgmail.GmailComposedMessage(mailtoAddr, mailSubject, content) ga.login() ga.sendMessage(gcm) # 因为本次读出的IP地址和上次不同, 所以发送邮件后要把新的IP更新到本地文件 wFile = file(logFileName, 'w') wFile.write(IP) wFile.close() print "Done!"
主要的修改是增加了本地文件记录IP地址, 如果获取到的IP地址与本地的一样, 就意味着已经通知过这个IP地址, 就不再重复发送通知邮件了! 只有当获取到的IP和本地文件存储的IP不同时, 才发送通知邮件!