请求:树莓派DHCP公网IP变更监控Bash脚本实现及教程指导
当然可以!作为经常折腾树莓派的过来人,我给你整理了一套超详细的新手友好教程,全程跟着走就能搞定这个需求~
树莓派监控公网IP变更并邮件通知实现指南
一、先搞定准备工作
首先确保你的树莓派能正常联网,然后安装两个必要工具:curl(用来获取公网IP)和ssmtp(轻量级邮件发送工具,比复杂的邮件服务器好配置)。
打开终端,运行以下命令:
# 更新系统软件包 sudo apt update && sudo apt upgrade -y # 安装需要的工具 sudo apt install curl ssmtp -y
二、配置邮件发送功能(关键步骤)
这里以Gmail为例(其他邮箱类似,比如QQ邮箱、Outlook,只需要调整配置参数):
- 先给你的Gmail账号开启两步验证,然后创建一个应用密码(这一步很重要,普通密码无法用于第三方邮件客户端)。
- 编辑ssmtp的配置文件:
sudo nano /etc/ssmtp/ssmtp.conf
- 清空原有内容,粘贴下面的配置(把
your_email@gmail.com换成你的邮箱,your_app_password换成刚才创建的应用密码):
root=your_email@gmail.com mailhub=smtp.gmail.com:587 AuthUser=your_email@gmail.com AuthPass=your_app_password UseTLS=YES UseSTARTTLS=YES FromLineOverride=YES
- 保存并退出:按
Ctrl+O回车确认保存,再按Ctrl+X退出编辑器。
测试邮件发送:运行下面的命令,把your_receive_email@xxx.com换成你要接收通知的邮箱,要是能收到邮件,说明配置成功了!
echo "树莓派邮件测试" | ssmtp your_receive_email@xxx.com
如果用QQ邮箱的话,只需要把mailhub改成smtp.qq.com:587,AuthPass换成QQ邮箱的授权码(在QQ邮箱设置里开启POP3/SMTP后获取)。
三、编写IP监控脚本
接下来写核心的Bash脚本,全程带注释,新手也能看懂每一行的作用:
- 创建脚本文件:
nano ip_monitor.sh
- 粘贴下面的代码(记得替换
EMAIL变量为你的接收邮箱):
#!/bin/bash # -------------------------- 配置区 -------------------------- # 用来存储上次记录的公网IP的文件路径,建议放在pi用户目录下 IP_FILE="/home/pi/last_ip.txt" # 接收IP变更通知的邮箱 EMAIL="your_receive_email@xxx.com" # 获取公网IP的地址(icanhazip.com是稳定的免费服务) IP_CHECK_URL="https://icanhazip.com" # ----------------------------------------------------------- # 获取当前公网IP,-s参数让curl不输出进度信息 CURRENT_IP=$(curl -s "$IP_CHECK_URL") # 如果IP记录文件不存在,就创建并写入当前IP,这是第一次运行的情况 if [ ! -f "$IP_FILE" ]; then echo "$CURRENT_IP" > "$IP_FILE" echo "首次运行:已记录初始IP -> $CURRENT_IP" exit 0 fi # 读取上次记录的IP LAST_IP=$(cat "$IP_FILE") # 对比当前IP和上次的IP是否一致 if [ "$CURRENT_IP" != "$LAST_IP" ]; then # 构造邮件内容 SUBJECT="⚠️ 你的公网IP已变更!" MESSAGE="旧IP:$LAST_IP\n新IP:$CURRENT_IP\n\n请及时更新L2TP VPN配置~" # 发送邮件 echo -e "Subject: $SUBJECT\n\n$MESSAGE" | ssmtp "$EMAIL" # 更新IP记录文件为当前新IP echo "$CURRENT_IP" > "$IP_FILE" echo "IP已变更,通知邮件已发送 -> 新IP:$CURRENT_IP" else echo "IP未变更,当前IP:$CURRENT_IP" fi
- 保存退出后,给脚本添加执行权限:
chmod +x ip_monitor.sh
测试脚本:直接运行一次./ip_monitor.sh,会记录初始IP;之后如果你的公网IP变了(比如重启路由器),再运行脚本就会自动发邮件通知你啦。
四、设置定时任务,让脚本自动运行
总不能手动天天跑脚本吧,用crontab设置定时任务,让脚本每隔一段时间自动检查IP:
- 打开crontab编辑器:
crontab -e
如果是第一次打开,会让你选择编辑器,选nano(输入1回车就行)。
- 在文件末尾添加一行内容:
# 每5分钟运行一次脚本,同时把日志输出到ip_monitor_log.txt方便排查问题 */5 * * * * /home/pi/ip_monitor.sh >> /home/pi/ip_monitor_log.txt 2>&1
解释一下:*/5 * * * *代表每5分钟执行一次,后面是脚本的绝对路径,>> /home/pi/ip_monitor_log.txt 2>&1是把脚本的运行日志(包括错误信息)保存到日志文件里。
- 保存退出后,crontab会自动生效,以后脚本就会定时自动检查IP啦!
五、常见问题排查
- 收不到邮件:先看
ip_monitor_log.txt里有没有错误信息,检查ssmtp配置的邮箱账号、应用密码/授权码是否正确,树莓派能不能正常访问外网。 - 脚本运行报错:检查脚本的执行权限有没有加,
IP_FILE的路径是不是正确,直接运行curl https://icanhazip.com看能不能获取到IP。
内容的提问来源于stack exchange,提问作者Joseph Foley
相关产品推荐
相关产品推荐

