吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3242|回复: 38
上一主题 下一主题
收起左侧

[Python 原创] 定时获取公网ip并发送邮件提醒

  [复制链接]
跳转到指定楼层
楼主
lxcl96 发表于 2023-11-7 13:18 回帖奖励
0、前言  前一段时间路由器刷的老毛子固件“穿透服务”中定时更新阿里DDNS失败了,用了很久第一次遇到。所以需要做个备用的措施用来实时获取公网ip信息。1、基于python实现
  • 开启邮箱的SMTP功能
  • 拿到授权码(不是登录密码)


[Python] 纯文本查看 复制代码
#!/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文件启动脚本
[Bash shell] 纯文本查看 复制代码
"D:\Program Files\Python310\python.exe" D:\Code\Code\sendWANIP\sendWANIP.py

3、Windows任务计划
添加windows任务计划,每隔10分钟执行bat文件获取公网ip
注意:
  • “程序或脚本”中写的可执行文件不要被引号包裹
  • 起始位置必填,为可执行文件所在的目录否则无法执行


4、shell脚本
路由器上跑的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)

免费评分

参与人数 6吾爱币 +11 热心值 +5 收起 理由
hzh193536 + 1 + 1 热心回复!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lcg2014 + 1 + 1 零基础也能学会,感谢
ROOT007 + 1 谢谢@Thanks!
hrh123 + 1 + 1 用心讨论,共获提升!
aurora423 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
wululu0922 发表于 2023-11-7 23:50
这个太麻烦了!!看看这个:https://github.com/jeessy2/ddns-go
推荐
three 发表于 2023-11-7 18:18
[Asm] 纯文本查看 复制代码
set CARR_date=%date:~0,4%%date:~5,2%%date:~8,2%
curl http://members.3322.org/dyndns/getip/  >>getip.txt
echo ^<br^> %CARR_date% ^<br^>   > getip.txt
blat getip.txt -html -to 接收邮箱 -attach "getip.txt" -s "标题" -r -d


批处理cmd命令,4行代码解决问题,最短可能只需2行。
发邮件软件我用的 blat, 其他一样做成 任务计划,
批处理还可以 更改一下,不写时间,大约5~6行,对比上一次获取ip文件 是否和当前ip文件 不同,针对不同,发不同邮件!

发邮件可以能会用的组件:
stunnel    https://www.stunnel.org/downloads.html
Blat       https://sourceforge.net/projects/blat/
网上有使用方法。       

点评

牛人辈出!  发表于 2023-11-8 10:04
沙发
wm517 发表于 2023-11-7 15:53
3#
mngzs 发表于 2023-11-7 15:55
没公网,但有ipv6
4#
不知道改成啥 发表于 2023-11-7 16:24
获取ip的端口收下了
5#
Kls673M 发表于 2023-11-7 16:42
ip6有什么办法穿
6#
四哥! 发表于 2023-11-7 16:48
获取ip的端口收下了
7#
G_F1019 发表于 2023-11-7 17:24
感谢分享
8#
DaRuiDd 发表于 2023-11-7 17:39
这可以用来做什么,可以说一下么
9#
zxsbk 发表于 2023-11-7 17:53
我的树莓派可以用上了。
10#
ytfrdfiw 发表于 2023-11-7 17:58
感谢分享。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-4 13:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表