OPNsense 系列十:liteip 配合 DDNS 实现 IPv6 地址变化电子邮件通知

发布时间 2023-10-20 18:26:12作者: Yogile

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.iniliteip_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. 不发送邮件。