You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求:树莓派DHCP公网IP变更监控Bash脚本实现及教程指导

当然可以!作为经常折腾树莓派的过来人,我给你整理了一套超详细的新手友好教程,全程跟着走就能搞定这个需求~

树莓派监控公网IP变更并邮件通知实现指南

一、先搞定准备工作

首先确保你的树莓派能正常联网,然后安装两个必要工具:curl(用来获取公网IP)和ssmtp(轻量级邮件发送工具,比复杂的邮件服务器好配置)。

打开终端,运行以下命令:

# 更新系统软件包
sudo apt update && sudo apt upgrade -y

# 安装需要的工具
sudo apt install curl ssmtp -y

二、配置邮件发送功能(关键步骤)

这里以Gmail为例(其他邮箱类似,比如QQ邮箱、Outlook,只需要调整配置参数):

  1. 先给你的Gmail账号开启两步验证,然后创建一个应用密码(这一步很重要,普通密码无法用于第三方邮件客户端)。
  2. 编辑ssmtp的配置文件:
sudo nano /etc/ssmtp/ssmtp.conf
  1. 清空原有内容,粘贴下面的配置(把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
  1. 保存并退出:按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脚本,全程带注释,新手也能看懂每一行的作用:

  1. 创建脚本文件:
nano ip_monitor.sh
  1. 粘贴下面的代码(记得替换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
  1. 保存退出后,给脚本添加执行权限:
chmod +x ip_monitor.sh

测试脚本:直接运行一次./ip_monitor.sh,会记录初始IP;之后如果你的公网IP变了(比如重启路由器),再运行脚本就会自动发邮件通知你啦。

四、设置定时任务,让脚本自动运行

总不能手动天天跑脚本吧,用crontab设置定时任务,让脚本每隔一段时间自动检查IP:

  1. 打开crontab编辑器:
crontab -e

如果是第一次打开,会让你选择编辑器,选nano(输入1回车就行)。

  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是把脚本的运行日志(包括错误信息)保存到日志文件里。

  1. 保存退出后,crontab会自动生效,以后脚本就会定时自动检查IP啦!

五、常见问题排查

  • 收不到邮件:先看ip_monitor_log.txt里有没有错误信息,检查ssmtp配置的邮箱账号、应用密码/授权码是否正确,树莓派能不能正常访问外网。
  • 脚本运行报错:检查脚本的执行权限有没有加,IP_FILE的路径是不是正确,直接运行curl https://icanhazip.com看能不能获取到IP。

内容的提问来源于stack exchange,提问作者Joseph Foley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:14:48