OPNsense 系列十:liteip 配合 DDNS 实现 IPv6 地址变化电子邮件通知
liteip
介绍
基于 Python 的终端网络信息获取小工具,实现域名、 IPv4 、 IPv6 、 MAC 更新的电子邮件通知。
支持 Windows7 、 Windows10 、 FreeBSD ( Linux 应该都可以支持),建议搭配 DDNS 配合使用。
Gitee:liteip
文件说明
liteip_main_debug.py
为主要程序,用于实现功能。
read_liteip_db.py
用于查看数据库文件。
两者完全独立。
使用教程
1. 生成配置文件
Python3 运行即可生成配置文件:
python3 ./liteip_main_debug.py
提示:
[WARNING] [__main__] Config.ini has been created. Check and modify file content.
[ERROR] [PROSSESE_INFO] [Init_Config] Config.ini COMMOND has not been modify.
[WARNING] [__main__] Config.ini has been created. Check and modify file content.
生成的配置文件 config.ini
在 liteip_main_debug.py
相同路径下:
[COMMAND]
command =
[MAIL_SENDER]
usermail =
password =
server = smtp.qq.com
port = 465
username =
[MAIL_RECEIVER]
usermail =
username =
[MAIL_BODY]
mail_body =
[MAIL_AHERF]
mail_aherf =
2. 修改配置文件
2.1 [COMMAND]
command
用于获取终端 IPv6 。
建议:固定公网 IPv6 前缀 60 位,固定终端本地 IPv6 后缀。
此参数逻辑:正则匹配所有 IPv6 地址的前 4 位十六进制和后 4 位十六进制。
2.2 [MAIL_SENDER]
项 | 值 | 说明 |
---|---|---|
usermail |
example@qq.com |
发件邮箱账号(对应邮件服务器) |
password |
examplepass |
发件邮箱账号密钥(16位密钥) |
server |
smtp.qq.com |
默认使用 QQ SMTP 邮件服务器,可自行修改 |
port |
465 |
默认使用QQ SMTP 邮件服务器端口,可自行修改 |
username |
ExampleSender |
发件人名称,可自定义 |
2.3 [MAIL_RECEIVER]
项 | 值 | 说明 |
---|---|---|
usermail |
example@qq.com |
收件邮箱 |
username |
ExampleReceiver |
收件人名称,可自定义 |
2.4 [MAIL_BODY]
项 | 值 | 说明 |
---|---|---|
mail_body |
Subject |
邮件主题 |
2.5 [MAIL_AHERF]
项 | 值 | 说明 |
---|---|---|
mail_aherf |
<a herf="https://www.baidu.com/">百度一下</a> |
邮件内链接 HTML 文本 |
2.6 示例
注意:所有参数都按照字符串管理,无需加 ""
双引号。
Windows
[COMMAND]
start = 2409
end = 2w3e
[MAIL_SENDER]
usermail = example@qq.com
password = dafhafjyjd3557yjgh
server = smtp.qq.com
port = 465
username = Example Mail
[MAIL_RECEIVER]
usermail = example@qq.com
username = Example
[MAIL_BODY]
mail_body = Example 数据变更通知
[MAIL_AHERF]
mail_aherf = <a href='https://www.baidu.com/' target='_blank' class='amber'>[百度一下]</a> 。
Linux:
[COMMAND]
command = ifconfig eth0 | grep 'inet6 2409' | grep '216:xxxx:xxxx:6b8c' | awk '{print $2}' | head -1
[MAIL_SENDER]
usermail = example@qq.com
password = dafhafjyjd3557yjgh
server = smtp.qq.com
port = 465
username = Example Mail
[MAIL_RECEIVER]
usermail = example@qq.com
username = Example
[MAIL_BODY]
mail_body = Example 数据变更通知
[MAIL_AHERF]
mail_aherf = <a href='https://www.baidu.com/' target='_blank' class='amber'>[百度一下]</a> 。
3. 自动生成 liteip.db 文件
修改完配置文件后,再次执行程序。
python3 ./liteip_main_debug.py
提示:
[INFO] [SQLITE] [Check_DB_And_TABLE] DB file created.
[INFO] [SQLITE] [Check_DB_And_TABLE] Created TABLE LITE_IP
[INFO] [INFOMATION] [Set_HOST] INFOMATION.HOST update
[INFO] [INFOMATION] [Auto_Init] AUTOSET_HOST
[INFO] [INFOMATION] [AutoSet_UPTIME] INFOMATION.UPTIME update
[INFO] [INFOMATION] [Auto_Init] AUTOSET_UPTIME
[INFO] [INFOMATION] [Set_IPV4] INFOMATION.IPV4 update
[INFO] [INFOMATION] [Auto_Init] AUTOSET_IPV4
[INFO] [SUBPROCESS] [Get_IPv6] Finish
[INFO] [INFOMATION] [Set_IPV6] INFOMATION.IPV6 update
[INFO] [INFOMATION] [Auto_Init] AUTOSET_IPV6
[INFO] [INFOMATION] [Set_MAC] INFOMATION.MAC update
[INFO] [INFOMATION] [Auto_Init] AUTOSET_MAC
[INFO] [SQLITE] [Check_DB_And_TABLE] Created DB and TABLE finish
[INFO] [SQLITE] [Check_Connect] Connected DB
[INFO] [SQLITE] [GET_INFO] 'SELECT from LITE_IP' succese
[INFO] [INFOMATION] [AutoSet_UPTIME] INFOMATION.UPTIME update
[INFO] [INFOMATION] [Auto_Init] AUTOSET_UPTIME
[INFO] [SUBPROCESS] [Get_IPv6] Finish
[INFO] [MAIL] [SendMail] server.login() success
[INFO] [MAIL] [SendMail] server.sendmail() success
[INFO] {'INFOMATION.HOST': 'FreeBSD', 'INFOMATION.UPTIME': '2023-10-20 07:08:38', 'INFOMATION.IPV4': '192.168.2.1', 'INFOMATION.IPV6': 'fe80::216:XXXX:XXXX:XXXX', 'INFOMATION.MAC': 'XX:XX:XX:XX:XX:XX'}
[INFO]
无 [ERROR]
错误,则运行正常。
最后输出邮件主要通告信息字典,且提示 SendMail ......success
邮件发送成功。收到邮件后无异常即可正常使用。
4. 邮件
邮件内容在 liteip_mail_debug.py
文件 class Mail
类的 def Get_Html(id, host, uptime, ipv4, ipv6, mac)
函数中。
可自行修改有关内容。
示例:
5. 更新通知
建议通过计划任务实现每 15 分钟定时检查发送。
因公网 IPv6 会不定时变化。
再次执行 python3 ./liteip_main_debug.py
时:
[INFO] [__main__] 2023-10-20 09:17:33
[INFO] [PROSSESE_INFO] [Init_Name_And_Path] Get system type: Linux
[INFO] [SQLITE] [Check_Connect] Connected DB
[INFO] [SQLITE] [GET_INFO] 'SELECT from LITE_IP' succese
[INFO] [INFOMATION] [AutoSet_UPTIME] INFOMATION.UPTIME update.
[INFO] [INFOMATION] [Auto_Init] AUTOSET_UPTIME
[ERROR] [SUBPROCESS] [Get_IPv6] Finish.
[INFO] [__main__] No infomation changed. Pass send mail.
[INFO] {'INFOMATION.HOST': 'FreeBSD', 'INFOMATION.UPTIME': '2023-10-20 07:08:38', 'INFOMATION.IPV4': '192.168.2.1', 'INFOMATION.IPV6': 'fe80::216:XXXX:XXXX:XXXX', 'INFOMATION.MAC': 'XX:XX:XX:XX:XX:XX'}
[INFO]
判断无数据变化,则:No infomation changed. Pass send mail.
不发送邮件。