在Linux系统检查IP变化并通过邮件通知

创建文件:ipmail.py并写入以下后续内容。

使用方法:./ipmail.py myhost

在crontab -e中增加定时执行,每分钟一次

*/1 * * * * /path/to/ipmail.py myhost

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# coder itw
# date 20200406
#
# 本代码主要用于检查当前操作系统的IPv6地址。在地址发生变更给某个邮箱发个邮件。
# 方便通过IPv6地址随时连接相关电脑。邮件主题可以通过参数进行定义可以方便的支持多个主机的情况。
#
import os
import sys

MailTo = "mailto@qq.com" #收通知的邮件帐号如果有多个使用逗号分割。
MailServer = "smtp.qq.com" #你的邮箱服务器
MailPort = 465
MailAccount = "mailfrom@qq.com" #你的邮箱帐号
MailPassword = "password" #你的邮箱密码。


def sendEmail(addr, title, text):
    import smtplib
    from email.mime.text import MIMEText
    # from email.utils import formataddr

    msg = MIMEText(text, 'plain', 'utf-8')
    msg['From'] = MailAccount
    msg['To'] = addr
    msg['Subject'] = title
    try:
        server = smtplib.SMTP_SSL(MailServer, 465)
        server.login(MailAccount, MailPassword)
        server.sendmail(MailAccount, [addr], msg.as_string())
        server.quit()
        return True
    except Exception:
        return False


def readFile(name):
    if os.path.exists(name):
        try:
            f = open(name, 'r')
            s = f.read()
            return s
        finally:
            if f:
                f.close()
    else:
        return ""


def writeFile(name, data):
    try:
        f = open(name, 'w')
        f.write(data)
    finally:
        if f:
            f.close()


def getipaddr():
    with os.popen("ip address|grep global|awk -F' ' '{print $2}'", "r") as p:
        r = p.read()
    return r


def main(argv):
    if len(argv) < 2:
        print("useage: " + argv[0] + " hostname")
        print("hostname is the key make you known what host is this.")
        exit(0)

    # opts, args = getopt.getopt(args,)
    host = argv[1];
    ipinfo = getipaddr()
    # print(ipinfo)
    oldipinfo = readFile("/tmp/ipinfo")
    if ipinfo != oldipinfo:
        writeFile("/tmp/ipinfo", ipinfo)
        sendEmail(MailTo, "host: " + host, ipinfo)
        print("ipinfo was changed,update mail sent.")
    else:
        print("ipinfo was not changed.")


if __name__ == '__main__':
    main(sys.argv)

关于xmsg

技术面前人人平等.同时技术也不分高低贵贱.正所谓学无大小,达者为尊.
此条目发表在Linux, Python, 未分类分类目录。将固定链接加入收藏夹。