这是一个用于监控公网 IPv4 地址变化的 Bash 脚本。当检测到 IP 发生变化时,它会自动运行 IP 质量检测(使用 IP.Check.Place 脚本),生成可视化的 PNG 报告,并通过 Telegram Bot 发送通知。
- 多源 IP 检测:轮询多个可靠的 API(如 ip.sb, icanhazip.com 等)获取当前公网 IP,确保稳定性。
- IP 变更监控:自动记录上一次的 IP,仅在 IP 发生变化时触发后续操作。
- 自动质量检测:集成
IP.Check.Place脚本,自动进行 IP 质量评估(包含-E增强模式)。 - 生成图片报告:利用
ansilove将终端的 ANSI 输出转换为高质量的 PNG 图片。 - Telegram 通知:将变更详情(新旧 IP、时间)及生成的报告图片发送到指定的 Telegram Chat。
- 日志记录:详细记录检测过程、错误信息及发送状态到日志文件。
- 自动清理:发送成功后自动清理生成的临时图片。
在使用此脚本之前,请确保系统已安装以下依赖:
curl(用于网络请求)bash(脚本解释器)ansilove(核心依赖:用于将 ANSI 文本转换为 PNG 图片)grep,sed,awk(标准文本处理工具)
Ubuntu/Debian:
sudo apt update
sudo apt install ansiloveCentOS/RHEL:
sudo yum install ansilovemacOS:
brew install ansilove-
下载脚本 将
monitor_ip.sh下载到你的服务器或本地机器。 -
赋予执行权限
chmod +x monitor_ip.sh
-
配置脚本 打开
monitor_ip.sh文件,修改顶部的配置区域:# Telegram Bot 配置 TG_BOT_TOKEN="你的_BOT_TOKEN" # 从 @BotFather 获取 TG_CHAT_ID="你的_CHAT_ID" # 接收消息的用户 ID 或群组 ID # 文件路径配置 IP_LOG_FILE="/root/.current_ip_log" # 用于记录当前 IP 的文件路径 IMAGE_DIR="/root" # 图片生成的目录 LOG_FILE="/var/log/ip_monitor.log" # 日志文件路径
注意:请确保脚本对配置的目录(如
/root或/var/log)拥有写入权限。如果是普通用户运行,建议修改为用户目录下的路径(例如~/ip_monitor.log)。# 配置Telegram发送信息的细节 RESPONSE=$(curl -s -X POST "https://api.telegram.org/bot$TG_BOT_TOKEN/sendPhoto" \ -F chat_id="$TG_CHAT_ID" \ -F caption="🚨 **XXXX 家宽 IP 地址已变更**\n新 IP: \`$CURRENT_IP\`\n旧 IP: \`$LAST_IP\`\n时间: $(date '+%Y-%m-%d %H:%M:%S')\n参数: \`-4 -E\`" \ -F parse_mode="Markdown" \ -F photo="@$LATEST_PNG")
直接运行脚本进行测试:
./monitor_ip.sh如果是首次运行(或没有历史记录),它会记录当前 IP。如果此时再次运行且 IP 未变,脚本将静默退出。
建议将脚本加入 crontab 实现自动化监控。例如每 5 分钟检测一次:
-
编辑 crontab:
crontab -e
-
添加如下行:
*/5 * * * * /path/to/monitor_ip.sh
脚本的运行日志保存在配置的 LOG_FILE 中(默认 /var/log/ip_monitor.log)。可以通过以下命令查看:
tail -f /var/log/ip_monitor.log- 脚本启动,尝试从 API 获取当前公网 IP。
- 读取本地缓存的旧 IP(
IP_LOG_FILE)。 - 对比新旧 IP:
- 如有变化:
- 更新本地缓存。
- 调用远程脚本
bash <(curl -sL IP.Check.Place) -4 -E进行检测。 - 捕获输出并使用
ansilove生成 PNG 图片。 - 发送 Telegram 通知(包含新旧 IP 对比及图片)。
- 清理临时文件。
- 如无变化:
- 退出(不进行任何操作)。
- 如有变化:
本项目采用 GNU Affero General Public License v3.0 协议开源。