Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址

2025-06-01 07:38:05 15点赞 55收藏 33评论

家里不是固定的公网IP地址,所以公网IP总是到期了就变化。年轻的时候把3389映射出去,通过公网IP地址远程桌面连接到家里的电脑。怎么获取公网IP地址难住了当时的我,所以用Python写了获取公网IP地址然后发送邮件的脚本,在windows上测试没问题以后就在NAS中设置任务计划,每天执行一次,邮件通知我当天的公网IP地址。

脚本内容如下,大概原理就是先通过打开查询IP地址的网页,截取IP地址,重新编好文字以后通过SMTP邮件服务登陆邮箱发出来。


#!usrbinpython3

#coding=utf-8

from urllib import request

import re

import smtplib

from email.mime.text import MIMEText

from email.header import Header

url = str(request.urlopen(r'http://txt.go.sohu.com/ip/soip').read())

ip = re.findall(r'd+.d+.d+.d+', url)

print(ip[0])

# 第三方 SMTP 服务

mail_host='smtp.yeah.net' #邮件发件服务器

mail_user='xxxxxx@yeah.net' #用户名

mail_pass='xxxxxx' #邮箱密码

sender = 'xxxxxx@yeah.net' #和上面的用户名一致

receivers = ['xxxxxx@yeah.net'] # 接收邮件

message = MIMEText('家里公网IP地址是 '+ip[0], 'plain', 'utf-8')

message['From'] = f"{Header('xxx-NAS', 'utf-8')} <{sender}>" message['To'] = Header("xx", 'utf-8') message['Subject'] = Header("家里公网IP地址通知", 'utf-8')

try:

smtpObj = smtplib.SMTP()

smtpObj.connect(mail_host, 25) # SMTP 端口号

smtpObj.login(mail_user,mail_pass)

smtpObj.sendmail(sender, receivers, message.as_string())

print ("Sucess")

except smtplib.SMTPException:

print ("Error")


办法很土,但这确实是我上学时候第一次用Python呢。把Python脚本文件“PublicIP.py”放到NAS固定的路径下,如图设置一个定期执行的任务,这就可以了。

Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址

现在咱们试一下用青龙面板,代替群晖中的任务计划,定时实现相同的功能。

首先登陆青龙面板,左边选择脚本管理,右边点击加号选择创建脚本,点击本地文件,然后上传刚才的“PublicIP.py”脚本,然后即可在网页中看到和编辑脚本。

Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址

下一步创建定时任务,左侧点击定时任务,右侧选择创建任务,填写任务名称,脚本名称,以及定时类型和规则,这里为了测试,先选择手动运行吧。

Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址

点击右侧“运行”,点击确定后即运行了脚本,任务状态会变成“运行中”。

然后点击右侧的“日志”即可查看结果。

Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址

登陆邮箱即可看到自动发出的邮件。

Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址

测试成功以后,回到任务设置,修改定时类型为“常规定时”,定时规则为“0 0 9 * * *”即每天早上9点整。

Docker - 青龙面板之自动运行Python脚本发送本机公网IP地址

‌青龙面板是通过Cron表达式来定义任务的周期性执行规则。Cron表达式由5或6个字段组成(部分实现支持7个字段),每个字段代表不同的时间单位(秒、分、时、日、月、周等)。

  • 示例‌:

    • 0 0 8 * * *:每天8点执行。

    • */10 * * * *:每10分钟执行一次。

    • 0 0 23 * *:每天23点执行。

展开 收起
33评论

  • 精彩
  • 最新
  • 使用域名解析动态ip的还是要注意了,前段时间我就因为把域名映射到路由器管理页面被断网了,原则上只要使用了域名都要备案

    校验提示文案

    提交
    这是开了80端口吗?不做网页访问的话,只做远程登录没问题吧?

    校验提示文案

    提交
    80和443很多年前就被运营商默认屏蔽了,就只是个用了8088的路由器登录界面

    校验提示文案

    提交
    收起所有回复
  • 花生壳 ddns 就行,脚本也更简单,一句 curl 就解决了,加个定时任务或者 crontab 一天跑一次

    校验提示文案

    提交
  • 有nas不好装个DDNS吗?100多买10年域名更方便啊!

    校验提示文案

    提交
    是的,域名方便多了,nas或路由器通常也有现成的ddns工具。我有服务器所以就直接腾讯云买的域名,不想备案的话去国外买域名就可以了

    校验提示文案

    提交
    总有不爱折腾的同学。

    校验提示文案

    提交
    收起所有回复
  • 我也是这样的,用秦龙发送ip到微信应用,每天发送两次,主要是用转发cups打印机地址远程给小孩打印作业

    校验提示文案

    提交
    嗯,条条大路通罗马,适合自己就好

    校验提示文案

    提交
    收起所有回复
  • 我是孤陋寡味了,这么大牛为啥不用域名?是因为某些服务不能使用域名吗?

    校验提示文案

    提交
    为了炫技

    校验提示文案

    提交
    写给没有这个条件的年轻人。

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • 干脆再来个企业微信群,机器人发群里呗,再不行对接短信平台,短信发手机里。还能怎么才能更麻烦一点,欢迎大家补充。

    校验提示文案

    提交
    都是知识点 [傻笑]

    校验提示文案

    提交
    收起所有回复
  • 我直接在亚瑟上看

    校验提示文案

    提交
    嗯嗯,一千个读者有一千个哈姆雷特,

    校验提示文案

    提交
    收起所有回复
  • [得意] 我用python写了个青龙脚本日志集中通知脚本

    校验提示文案

    提交
    厉害,不管用什么方法,能成功就很厉害。网上教程很多,通俗易懂适合自己的最好。 [赞一个]

    校验提示文案

    提交
    收起所有回复
  • 。。。文章里用的nas?怎么还非用青龙配置定时任务呢。。。nas不就完事了。。 [高兴] [高兴] [高兴]

    校验提示文案

    提交
    嗯,里面写了,原来是nas的计划任务,这不是纯粹为了介绍docker应用吗。 [害羞]

    校验提示文案

    提交
    这个。。。佩服佩服~~

    校验提示文案

    提交
    收起所有回复
  • 我是孤陋寡味了,这么大牛为啥不用域名?是因为某些服务不能使用域名吗?

    校验提示文案

    提交
    哈哈,往前翻翻,也有同样的问题,这是写个没有域名的同学们。。

    校验提示文案

    提交
    收起所有回复
  • 飞牛os应用商店里有ddns go,更好用,另外不要用国内域名供应商,最好用国外的

    校验提示文案

    提交
    这么刷广告有点硬呢。

    校验提示文案

    提交
    收起所有回复
  • 我是直接打开馒头,就有nas做种的ip地址

    校验提示文案

    提交
  • 域名先不说,按你这思路,我有个更简单的,开个pt下载,网页后台就用公网地址

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
55
扫一下,分享更方便,购买更轻松