定时获取公网ip并发送邮件提醒

前一段时间路由器刷的老毛子固件“穿透服务”中定时更新阿里DDNS失败了,用了很久第一次遇到。所以需要做个备用的措施用来实时获取公网ip信息

1、基于python实现

  • 开启邮箱的SMTP功能
  • 拿到授权码(不是登录密码)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import re
import random
import requests
import logging
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from string import Template
from email.utils import parseaddr, formataddr
# 输出日志格式
logging.basicConfig(format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',level=logging.INFO,filename='sendWANIP.log',filemode='a')def _format_addr(s):"""美化邮箱地址,用于可显示发/收件人:param s: 邮件地址:return: 美化后的地址"""addr = parseaddr(s)return formataddr(addr)def get_current_ip():"""获取当前公网ip地址:return: 公网ip地址"""ip_reg = re.compile("((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}")# 可根据需求增删获取ip网址api_tuple = ("http://txt.go.sohu.com/ip/soip","https://ident.me/","https://ifconfig.me/ip","https://icanhazip.com/","https://checkip.amazonaws.com/","http://members.3322.org/dyndns/getip")url = api_tuple[random.randrange(len(api_tuple))]# print(url)r = requests.get(url)ip = re.findall(r'\d+.\d+.\d+.\d+', r.text)# ip[0]if re.match(ip_reg,ip[0]):logging.info("从{}获取地址成功!ip={}".format(url,ip))return ip[0]else:logging.error("从{}获取地址失败!".format(url))exit(-1)def record_ip(params):"""将最新的ip记录在文件中:param params: 包含ip的参数"""filename="./lastwanip"last_wan_ip=""if os.path.exists(filename):f=open(filename,'r');last_wan_ip=f.readline()f.close()logging.info("从文件中读到ip地址为:{}".format(last_wan_ip))if last_wan_ip!= params['current_ip']:f = open(filename, 'w');f.write(params['current_ip'])f.close()else:logging.info("ip地址已经是最新的,无需更新")exit(0)
def send_mail(params):"""给指定用户发送邮件:param params: 发送邮件信息:return: 0: 发送成功,>0 发送失败"""# 第三方 SMTP 服务mail_host = "smtp.163.com"  # 设置服务器mail_user = "xxxx"  # 用户名mail_pass = "xxxxxxxx"  # 口令,即授权码不是账户密码receivers = sender = 'xxxx@163.com'# 邮件内容支持html格式,仿照的腾讯云模板mail_text="""<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>IP地址</title></head><body><div><includetail><div align="center"><div class="open_email" style="margin-left: 8px; margin-top: 8px; margin-bottom: 8px; margin-right: 8px;"><div><br><span class="genEmailContent"><div id="cTMail-Wrap"style="word-break: break-all;box-sizing:border-box;text-align:center;min-width:320px; max-width:660px; border:1px solid #f6f6f6; background-color:#f7f8fa; margin:auto; padding:20px 0 30px; font-family:'helvetica neue',PingFangSC-Light,arial,'hiragino sans gb','microsoft yahei ui','microsoft yahei',simsun,sans-serif"><div class="main-content" style=""><table style="width:100%;font-weight:300;margin-bottom:10px;border-collapse:collapse"><tbody><tr style="font-weight:300"><td style="width:3%;max-width:30px;"></td><td style="max-width:600px;"><div id="cTMail-logo" style="width:92px; height:25px;"><a href="#"><img id="logo" border="0" src="data:image/png;base64,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"style="width:183px; height:66px;display:block"></a></div><br/><p style="height:2px;background-color: #00a4ff;border: 0;font-size:0;padding:0;width:100%;margin-top:20px;"></p><div id="cTMail-inner" style="background-color:#fff; padding:23px 0 20px;box-shadow: 0px 1px 1px 0px rgba(122, 55, 55, 0.2);text-align:left;"><table style="width:100%;font-weight:300;margin-bottom:10px;border-collapse:collapse;text-align:left;"><tbody><tr style="font-weight:300"><td style="width:3.2%;max-width:30px;"></td><td style="max-width:480px;text-align:left;"><h1 id="cTMail-title" style="font-size: 20px; line-height: 36px; margin: 0px 0px 22px;">[DynamicIP-Notice]</h1><p id="cTMail-userName" style="font-size:14px;color:#333; line-height:24px; margin:0;"><span>Your current public ip address is :<strong>${current_ip}</strong>.</span></p><dl style="font-size: 14px; color: rgb(51, 51, 51); line-height: 18px;"><dd style="margin: 0px 0px 6px; padding: 0px; font-size: 12px; line-height: 22px;"><p id="cTMail-sender" style="font-size: 14px; line-height: 26px; word-wrap: break-word; word-break: break-all; margin-top: 32px;">Sincerely,<br><strong>${device}</strong></p></dd></dl></td><td style="width:3.2%;max-width:30px;"></td></tr></tbody></table></div><div id="cTMail-copy" style="text-align:center; font-size:12px; line-height:18px; color:#999"><table style="width:100%;font-weight:300;margin-bottom:10px;border-collapse:collapse"><tbody><tr style="font-weight:300"><td style="width:3.2%;max-width:30px;"></td><td style="max-width:540px;"><p style="text-align:center; margin:20px auto 14px auto;font-size:12px;color:#999;">如非本人邮件,请忽略!</p><td style="width:3.2%;max-width:30px;"></td></tr></tbody></table></div></td><td style="width:3%;max-width:30px;"></td></tr></tbody></table></div></div></span></div></div></div></includetail></div></body></html>"""mail = MIMEText(Template(mail_text).substitute(params), 'html', 'utf-8')# 显示发件人mail['From'] = _format_addr(sender)mail['To'] = _format_addr(receivers)# 设置邮件主题subject = '[DynamicIP-Notice] {}'.format(params['current_ip'])mail['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP()smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号smtpObj.login(mail_user, mail_pass)smtpObj.sendmail(sender, receivers, mail.as_string())logging.info("邮件发送成功,最新ip为{}".format(params['current_ip']))return 0except smtplib.SMTPException as ex:logging.error("邮件发送失败{},".format(ex))return 1if __name__=='__main__':device = os.environ['COMPUTERNAME']params = {"current_ip": get_current_ip(), "device": device}record_ip(params)send_mail(params)

2、创建bat文件启动脚本

"D:\Program Files\Python310\python.exe" D:\Code\Code\sendWANIP\sendWANIP.py

3、Windows任务计划

添加windows任务计划,每隔10分钟执行bat文件获取公网ip
注意:

  • “程序或脚本”中写的可执行文件不要被引号包裹
  • 起始位置必填,为可执行文件所在的目录否则无法执行

4、shell脚本

路由器上跑的shell脚本,百度得来的出处忘记了,有需要的可以参考

#!/bin/bash#SMTP配置   #(例子)
#SMTP服务器#smtpserver=smtp.126.com
#邮箱账号#fromaddress=xxxxxx@126.com
#邮箱密码fromaddresspwd=xxxxxxxxxxxxx
#收件人信息#toaddress=xxxxxx@qq.com 英文逗号分隔#SMTP配置
smtpserver=smtp.163.com
fromaddress=xxxx@163.com
fromaddresspwd=xxxxxxxxxxxxx
toaddress=xxxxx@163.com#文件路径,最新ip写入lastwanip.txt 
iptxt="/etc/storage/lastwanip.txt"
#文件路径,邮件正文,写入mail文件
mailtxtpath="/etc/storage/mail.txt"#获取WANIP接口
newwanip=`wget http://members.3322.org/dyndns/getip -q -O -`#如接口获取不到ip,本次取消发送
echo $newwanipif [ x"$newwanip" = "x" ]; thennewwanip=`wget https://ifconfig.me/ip -q -O -`echo $newwanipif [ x"$newwanip" = "x" ]; thenexitfi
fiif [ -f $iptxt ]; thenoldwanip=`cat $iptxt`
elseoldwanip="0.0.0.0"
fi#对比上次IP,如相同则不发邮件,否则发送
echo $oldwanipif [ "$newwanip" = "$oldwanip" ]; thenexit
fi
if [ -f $mailtxtpath ]; thenrm -f $mailtxtpath
fi#配置邮件标题,修改“wanip”和在${newwanip} 后面加参数
#不能修改代码格式,行与行之间必须空格!
cat  <<EOF >>$mailtxtpath
Subject: WANIP:[ ${newwanip} ]路由器型号 = RedMi AC2100IP=    ${newwanip}okTo: $toaddress
From: $fromaddress
EOF#调用系统邮件服务
sendmail -f $fromaddress -t $toaddress -S $smtpserver -au$fromaddress -ap$fromaddresspwd < $mailtxtpath#缓存最新ip地址,写入/etc/storage/lastwanip.txt"
echo $newwanip > $iptxt#打印系统日志,调用logger接口
logger 发现WANIP变化,外网IP= $newwanip 
logger ($fromaddress)已邮件通知($toaddress)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/193181.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RocketMq系列-01】RocketMq安装和基本概念

RocketMq系列整体栏目 内容链接地址【一】RocketMq安装和基本概念https://zhenghuisheng.blog.csdn.net/article/details/134486709 RocketMq安装和基本概念 一&#xff0c;RocketMq安装和基本概念1&#xff0c;RocketMq基本安装(本地安装)2&#xff0c;Rocketmq的核心概念2.1&…

6.7二叉树的最小深度(LC111)

审题要清楚&#xff1a; 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意是叶子节点&#xff08;左右孩子都为空的节点才是叶子节点&#xff01;&#xff09;。 算法&#xff1a; 既可以求最小高度&#xff0c;也可以直接求深度。 最小高度&#xff1a; 后序…

JVM面试必备

目录 JVM三大问题 一、JVM内存区域划分 ​编辑 二、JVM类加载机制 双亲委派模型&#xff08;常考) 类加载的格式&#xff0c;类卸载 三、垃圾回收&#xff08;GC) 具体垃圾回收GC步骤 1.判定对象是否为垃圾 方案1:引用计数 方案2&#xff1a;可达性分析 2.释放对象的…

供应链|顶刊MSOM论文解读:服务竞争下的库存共享

问题背景 在汽车、玩具等行业中&#xff0c;零售商之间的库存共享变得十分常见。库存共享可以解决由需求不确定导致的库存错配问题。如果零售商之间同意共享库存&#xff0c;那么当需求较少、自身库存过剩时&#xff0c;可以将过剩库存卖给其他零售商&#xff1b;反之&#xf…

图像分类(一) 全面解读复现AlexNet

解读 论文原文&#xff1a;http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf Abstract-摘要 翻译 我们训练了一个庞大的深层卷积神经网络&#xff0c;将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分为1000个不…

WinForms C# 导入和导出 CSV 文件 Spread.NET

使用 WinForms C# 和 VB.NET 导入和导出 CSV 文件 2023 年 11 月 17 日 使用 Spread.NET 直接在 .NET WinForms 应用程序中处理 CSV 文件。 Spread.NET可帮助您创建电子表格、网格、仪表板和表单。它包括一个强大的计算引擎&#xff0c;具有 450 多个函数以及导入和导出 Micros…

React+后端实现导出Excle表格的功能

最近在做一个基于Reactantd前端框架的Excel导出功能&#xff0c;我主要在后端做了处理&#xff0c;这个功能完成后&#xff0c;便总结成一篇技术分享文章&#xff0c;感兴趣的小伙伴可以参考该分享来做导出excle表格功能&#xff0c;以下步骤同样适用于vue框架&#xff0c;或者…

从0开始学习JavaScript--JavaScript 字符串与文本内容使用

JavaScript中的字符串和文本内容处理是前端开发中的核心技能之一。本文将深入研究字符串的创建、操作&#xff0c;以及文本内容的获取、修改等操作&#xff0c;并通过丰富的示例代码&#xff0c;帮助读者更全面地了解和应用这些概念。 JavaScript 字符串基础 字符串是JavaScr…

在VS Code中使用VIM

文章目录 安装和基本使用设置 安装和基本使用 VIM是VS Code的强大对手&#xff0c;其简化版本VI是Linux内置的文本编辑器&#xff0c;堪称VS Code问世之前最流行的编辑器&#xff0c;也是VS Code问世之后&#xff0c;我仍在使用的编辑器。 对VIM无法割舍的原因有二&#xff0…

Springboot 项目启动类放置位置

文章目录 Springboot 项目启动类放置位置springboot 默认包扫描机制启动类放在特定位置springboot 启动注解理解配置启动类扫描特定的包1、 ComponentScan2、利用 SpringBootApplication 注解的 scanBasePackages 属性 Springboot 项目启动类放置位置 如果我们使用 IDEA 或者 …

C++标准模板(STL)- 类型支持 (类型关系,检查两个类型是否相同,std::is_same)

类型特性 类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完…

【Redux】Redux 基本使用

1. Redux 快速上手 Redux 是 React 最常用的集中状态管理工具&#xff0c;类似于Vue中的Pinia&#xff08;Vuex&#xff09;&#xff0c;可以独立于框架运行。 <button id"decrement">-</button> <span id"count">0</span> <…