python实现自动检测Linux服务器的IP地址并转发至邮箱

  • 最近在用实验室的工作站做东西,但是令人作呕的是联网只能使用pppoe拨号连接,一设置静态IP网络就直接挂掉(可能是我比较笨),既不能放弃外网连接,又想使用xshell操作工作站,由于pppoe的ip是隔一段时间就会变化的,所以想了个办法,写一个脚本,当服务器的ip地址发生变化时,就通过邮件告诉我,这样我就能实时的掌握其ip的变化,也就可以通过xshell进行访问了。
  • 既然有了思路,那就直接开始。

通过shell命令获取ip地址

  • 通过shell获取ip的方法非常多,比如ifconfig,hostname -I,ip addr等等,通过命令获取的ip地址是在屏幕上的标准输出流输出出来的,所以需要捕捉到这个流,然后筛选出其中的有用信息就可以了。使用python来实现这一功能,在网上看很多人写的代码,通过socket的,使用正则表达式的,是在太麻烦了。使用hostname -I可以清晰的展示出我们想要的内容。
from subprocess import Popen, PIPE

def getIP():
    p = Popen("hostname -I", shell=True, stdout=PIPE)
    ip = p.stdout.read()
    ip = str(ip, encoding="UTF-8")
    # 发现在获取时,后面会有回车,去除后面的空格
    ip = ip.strip()
    print(ip)
    return ip


if __name__ == "__main__":
    getIP()
  • 在LINUX下可以看到输出
10.170.11.11

自动发送邮件脚本

  • 现在我们已经获取了IP地址,只需要对IP地址进行判断,然后发送到我的邮箱就可以了
  • 直接上代码:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr


def send_mail(user, passwd, receiver, message):
    try:
        # 邮件内容
        msg = MIMEText(message,"plain", "utf-8")
        # 寄件人
        msg["From"] = formataddr(("sender", user))
        # 收件人
        msg["To"] = formataddr(("receiver", receiver))
        # 主题
        msg["Subject"] = "this is a test mail"
		# smtp服务器地址和端口,不知道的根据自己邮箱查
        server = smtplib.SMTP_SSL("smtp.qq.com",465) 
        # 登录以获取服务
        server.login(user,passwd)
        server.sendmail(user, [receiver,], msg.as_string())
        server.quit()
        print("发送成功!")
    except Exception:
        print("未发送成功")


if __name__ == "__main__":
    user = "XXX4@qq.com"  # 发送
    passwd = "qXXXzknmmqbgcd"  # 密码,这个密码并不是邮箱密码,而是开启smtp服务时服务器生成的密码
    receiver = "xxx@aliyun.com" # 接收邮箱
    mail = "这是一个测试邮件"
    send_mail(user, passwd, receiver, mail)

定时获取IP并和之前的ip进行比较

  • 两个重要的部分都已经完成了,现在只需要写一个定时程序和对比的程序就可以了
import time
import get_ip
import mail


def main():
    ip = ""
    user = "q.com"
    passwd = "bgcd"
    receiver = "un.com"
    while True:
        # 每60s检测一次
        time.sleep(60)
        temp = get_ip
        if ip != temp:
            # 如果ip发生了改变,发邮件通知
            mail.send_mail(user, passwd, receiver, temp)
            ip = temp


main()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值