监测ip变化并发送邮件通知


需求: 宽带没有定制专线服务,ip会定时更新,但是服务端会有白名单,ip变化就无法再连接服务端。开发一个脚本,监测本地ip的变化,发生变化时主动发送邮件给服务端开发人员。

效果如下:
在这里插入图片描述

1. 检测此时电脑ip

在这里插入图片描述
步骤如下:
在这里插入图片描述

2. 知道了现在的ip就可以使用 >> 重定向到你自己的文件中
3. 取出你文件中保存的ip,并重新获取你现在的ip 如果ip不一样代表发生了变化,就发送邮件

脚本如下:

while True; do
	#statements
	last_ip=$(cat /Users/zh/Desktop/zh/my_ip_history.txt | tail -n1 )
	now_ip=$(ifconfig utun2 | tr -s ' ' | cut -d' ' -f2 | tail -n1)
	if [[ $last_ip == $now_ip ]]; then
		echo "ip未发生改变为: $last_ip";
		
	else
		echo "ip已经重置: 当前ip为: $now_ip"
		echo "$now_ip" >> /Users/zh/Desktop/zh/my_ip_history.txt
		# 发送邮件
		python3 /Users/zh/Desktop/py_project/test2.py $now_ip
	fi
	sleep 60;
done
4. 发送邮件的代码如下:
# test2.py
import sys
import time
from email.mime.multipart import MIMEMultipart  # 打包多个部分的邮件内容(正文、附件、图片...)
from email.mime.text import MIMEText  # 邮件的正文内容
from email.mime.application import MIMEApplication  # 用来发送附件
from email.mime.image import MIMEImage  # 用来发送图片
import smtplib  # 发送邮件
from email.utils import parseaddr, formataddr
from email.header import Header


class EmailAlert(object):
    def __init__(self):
        """连接smtp服务器"""
        # 1.邮箱服务地址
        smtp_server = 'smtp.163.com'  # 网易邮箱服务地址:smtp.163.com;QQ邮箱服务地址:smtp.qq.com
        # 2.实例化smtplib模块中的SMTP对象
        self.server = smtplib.SMTP()
        # 3.连接服务器,需要2个参数[邮箱服务地址、SMTP端口号]
        self.server.connect(smtp_server, 25)

        """登录邮箱"""
        # 1.发件人地址
        self.from_addr = '***@163.com'
        # 2.邮箱授权密码 【注意】该密码不是你邮箱的登录密码
        password = '***'  # 替换成自己的邮箱授权密码
        # 3.登录邮箱
        self.server.login(self.from_addr, password)
        # 当前时间(看是实际开发需求)
        self.time1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))

    def _format_addr(self, s):
        name, addr = parseaddr(s)
        # 如果包含中文,需要通过Header对象进行编码。
        return formataddr((Header(name, 'utf-8').encode(), addr))

    def Mail_Notice(self):
        """'编辑发送信息"""
        # 1.收件人/抄送人地址
        # 如果要发给多人,格式为['***@qq.com','***@163.com','***@qq.com']
        to_addrs = ['***@qq.com']  # 收件人地址
        # cc_addrs = ['***@qq.com']  # 抄送人地址

        # 2.构造一个邮件对象
        msg = MIMEMultipart()
        subject = 'ip监测-ip发生变化会主动发送邮件通知'
        msg['Subject'] = Header(subject, 'utf-8').encode()  # 邮件主题
        msg['From'] = self._format_addr('ip监测<%s>' % self.from_addr)  # 发件人名称
        msg['To'] = ','.join(to_addrs)  # 收件人
        # msg['Cc'] = ','.join(cc_addrs)  # 抄送人

        # 3.1.1如果是纯文本邮件 构造MIMEText对象,需要3个参数[邮件正文、MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain'、编码格式]
        # 其中,'_subtype'值默认为'palin'
        now_ip = sys.argv[1]
        text_str = f'{self.time1} - ip为: {now_ip}'
        content = MIMEText(text_str, 'plain', 'utf-8')  # 正文内容

        # 3.1.2有时候我们发送的可能不是纯文本,需要发送HTML邮件,将异常网页信息发送回去。在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由“plain" 变为“html”
        # html_str = f'<h5>Python爬虫运行异常,异常信息为遇到HTTP 403...{self.time1}</h5><p>send by <a href="http://www.python.org"><img src="cid:img1" width="400px"></a></p>'
        # content = MIMEText(html_str, 'html', 'utf-8')

        # 4.添加到 MIMEMultipart
        msg.attach(content)
        #
        # # 3.2如果在HTML邮件中,想添加图片
        # file_path = '/Users/zh/competitive_benchmarking/Automator/page0.jpg'  # 你本地图片的路径
        # img = MIMEImage(open(file_path, 'rb').read())  # 打开读取图片
        # img.add_header('Content-ID', 'img1')  # 给图片一个ID值  需要跟上面html_str = '...img src="cid:img1">...'中的cid值对应
        # msg.attach(img)

        # 3.3在邮件中添加附件(xlsx、docx、pdf、MP3、MP4...)
        # file_path = 'C:\\Users\\admin\\Desktop\\租房信息.xlsx'  # 本地路径
        # app = MIMEApplication(open(file_path, 'rb').read())
        # app.add_header('content-disposition', 'attachment', filename='租房信息.xlsx')
        # msg.attach(app)

        """发送邮件"""
        try:
            # 方法中介绍需要传入msg, from_addr=None, to_addrs=None,mail_options=[], rcpt_options={}
            # 为什么这里只传入一个msg呢,因为在方法下面还介绍了,如果没有传入会自动去msg中找这些参数
            self.server.send_message(msg)  # 发送邮件
            print('邮件发送  ...OK')
        except Exception as e:
            print(f'邮件发送  ...fail\n原因如下:{e}')

        """退出邮箱"""
        self.server.quit()


if __name__ == '__main__':
    email_alert = EmailAlert()
    email_alert.Mail_Notice()

最后我们运行脚本就好了。
我的脚本中sleep 60就是每分钟检验一次,实际需求可能不需要,因为ip可能是一天变化一次或者几天变化一次,自己进行调整即可。
获取ip的方式很多种还可以使用正则的方式,如下:

ifcon_data = os.popen('ifconfig | grep inet').read()

match_data = re.search(r'17\.\d+\.\d+\.\d+', ifcon_data)

发送邮件参考好友代码,传送门: https://blog.csdn.net/qq_45352972/article/details/109280576?spm=1001.2014.3001.5501

如果你觉得对你有帮助请点击关注,留言需求,我们一起写更多实用,好玩的脚本。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如何监测文件的变化并自动发送邮件呢?我们可以借助一些工具来实现这一功能。 首先,我们需要选择一个能够监测文件变化的工具。在Windows操作系统中,我们可以使用PowerShell命令或者使用第三方工具实现,如FreeFileSync或Karen's Replicator等。在Linux系统下,我们可以使用inotify工具。 接下来,我们需要配置邮件服务器信息以及发送邮件的脚本。在配置好邮件服务器信息之后,我们可以通过PowerShell命令或者Python脚本来实现自动发送邮件。 在设置监测文件并自动发送邮件之前,我们需要考虑一些注意事项。例如,在选择监测文件的时候要确保该文件经常发生变化,同时要选择监测文件的合适时间间隔。此外,在设置邮件发送脚本的时候,要确保邮件的安全性,比如使用SSL或TLS加密协议等。 总之,通过选择合适的监测文件工具、设置邮件服务器信息、编写自动发送邮件的脚本等步骤,我们可以轻松实现监测文件变化并自动发送邮件的功能,为我们的工作提供更多的便利。 ### 回答2: 监测文件变化自动发送邮件是一种非常方便的方法,可以实时地监测文件的修改情况,保证文件的安全性,避免误操作和丢失。 为了实现这一功能,我们可以使用一些常用的工具或者编程语言,如Linux环境下的inotify工具,或Python语言中的Watchdog库。通过简单的配置,这些工具可以自动监测所需文件的变化,如文件的编辑、删除和重命名等操作,并在检测到变化时自动触发指定的操作。 其中,发送邮件是常见的操作之一。我们可以使用SMTP协议连接到指定的邮件服务器,发送邮件到指定的邮箱,同时在邮件正文中添加所需的内容,如修改详情、变化时间等等,方便我们随时随地了解文件的变化情况。 然而,需要注意的是,在实际应用中,我们还需要考虑一些安全性问题,如邮件的加密传输、权限的控制等等,以确保数据的安全性和保密性。 总之,监测文件变化自动发送邮件是一项非常实用的功能,不仅可以提高工作效率和数据的安全性,还能为IT工作者带来更好的工作体验。 ### 回答3: 在软件开发和信息技术行业中,经常需要对代码和文件进行监测,以确保它们在被修改和更新后能够正常运行。对于程序员和系统管理员来说,能够及时了解这些变化非常重要,因此监测文件变化自动发送邮件的功能非常有用。 为实现此功能,可以使用一些第三方工具,如:inotify-tools, md5sum等。 这些工具可以通过监测文件系统的事件,来检测到文件的变化。当系统检测到文件有修改,就会执行一个shell脚本,脚本会通过邮件客户端接口来发送邮件通知邮件内容通常包括被修改文件的详细信息,如文件名、路径、时间戳和修改者等。 使用此功能可以让开发人员和系统管理员能够及时了解文件的变化,把握系统的变更情况。这个功能可以适用于一些紧急项目,要求及时响应问题的环境中,可以减少疏漏和人为失误,提高工作效率,确保项目进展和数据的安全性。 总之,监测文件变化自动发送邮件是一项非常有用的功能,对于程序员和系统管理员来说都非常实用,可以方便地了解系统的变化情况,提高工作效率和数据的安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值