大神论坛

找回密码
快速注册
查看: 167 | 回复: 0

[源码] 定时获取公网ip并发送邮件提醒源码

主题

帖子

0

积分

初入江湖

UID
634
积分
0
精华
威望
0 点
违规
大神币
68 枚
注册时间
2023-10-14 10:37
发表于 2023-11-11 16:10
本帖最后由 Xiao_xiao_ye 于 2023-11-11 16:10 编辑

0、前言  

前一段时间路由器刷的老毛子固件“穿透服务”中定时更新阿里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 0
except smtplib.SMTPException as ex:
logging.error("邮件发送失败{},".format(ex))
return 1

if __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 $newwanip

if [ x"$newwanip" = "x" ]; then
newwanip=`wget https://ifconfig.me/ip -q -O -`
echo $newwanip
if [ x"$newwanip" = "x" ]; then
exit
fi
fi

if [ -f $iptxt ]; then
oldwanip=`cat $iptxt`
else
oldwanip="0.0.0.0"
fi





#对比上次IP,如相同则不发邮件,否则发送
echo $oldwanip

if [ "$newwanip" = "$oldwanip" ]; then
exit
fi
if [ -f $mailtxtpath ]; then
rm -f $mailtxtpath
fi





#配置邮件标题,修改“wanip”和在${newwanip} 后面加参数
#不能修改代码格式,行与行之间必须空格!
cat <<EOF >>$mailtxtpath
Subject: WANIP:[ ${newwanip} ]

路由器型号 = RedMi AC2100

IP= ${newwanip}

ok

To: $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)


注:若转载请注明大神论坛来源(本贴地址)与作者信息。

返回顶部