代码如下:
import subprocess
import smtplib
from email.mime.text import MIMEText
subp = subprocess.Popen('curl ip.cip.cc',shell=True,stdout=subprocess.PIPE)
subp2 = subprocess.Popen('cat getip.txt',shell=True,stdout=subprocess.PIPE)
new_ip=subp.stdout.readline().decode().strip()
old_ip=subp2.stdout.readline().decode().strip()
if new_ip == old_ip :
f = open("getip.txt","w")
print(old_ip,file=f)
else:
mailserver = "smtp.qq.com"
usersname_send = '1@qq.com'
password = 'qqqqqqqq' #授权码
username_recv = '1@qq.com'
mail =MIMEText(new_ip)
mail['From'] = usersname_send
mail['To'] = username_recv
smtp = smtplib.SMTP_SSL(mailserver,port=465) #qq的smtp服务端口是465
smtp.login(usersname_send,password)
smtp.sendmail(usersname_send,username_recv,mail.as_string())
smtp.quit()
f = open("getip.txt","w")
print(new_ip,file=f)
解释:
这里我的思路很简单,使用python执行系统命令,判断ip是否相等也就是公网ip有无变化,有变化就发邮箱并且存入指定文本,如果没变化就把旧地址继续写入一遍
主要记住几个点:
一:
去除输出字符中的转移字符
我输出字符的时候是这样的:b’192.168.1.1/n’,去除字符使用.decode().strip()即可
二:
执行系统命令
我看了下,python执行系统命令有好几个方法,有一篇优秀的帖子Python3 执行Linux Bash命令
,大家可以查阅。我这里使用subprocess底层调用Popen执行系统命令,很好用,很舒服
三:
发送邮件我选择的比较简单的一种
没有发送附件等那些要求,只要对应的邮件服务支持免费开启smtp服务就可以用。还有更简单的一两句话就可以发送邮件的是一个github项目,叫做yagmail。可以自行研究使用
本文介绍了一种使用Python检查公网IP是否发生变化的方法,并在IP变更时通过邮件通知。利用subprocess执行系统命令获取IP,对比新旧IP,若不同则发送邮件并更新文本文件。
1007

被折叠的 条评论
为什么被折叠?



