监控VPS的IP变化并发送到telegram

如果你想知道VPS的IP变化以后,自动发送变化的IP到telegram的机器人,那么这个脚本就很适合。

安装Python3和pip3

apt install python3-pip -y

创建脚本ip_monitor.py,把下面的代码完整复制到编辑器,然后Ctrl + X,按Y,最后按Enter保存文件

nano ip_monitor.py
import requests
import time
import os
from datetime import datetime

# Telegram 配置
TELEGRAM_BOT_TOKEN = '75687999999:AAFz7WNMB78-_5_f6tRs99999ktQaasX64Y'  # 替换为你的 bot token
CHAT_ID = '1208199999'  # 替换为你的 chat ID

def get_current_ip():
    """获取当前公网 IP"""
    try:
        # 使用多个 IP 查询服务以增加可靠性
        services = [
            'https://api.ipify.org?format=json',
            'https://api.ip.sb/ip',
            'https://ifconfig.me/ip'
        ]
        
        for service in services:
            try:
                response = requests.get(service, timeout=10)
                if response.status_code == 200:
                    if 'json' in service:
                        return response.json()['ip']
                    return response.text.strip()
            except:
                continue
                
        raise Exception("无法获取 IP 地址")
    except Exception as e:
        print(f"获取 IP 出错: {str(e)}")
        return None

def send_telegram_message(message):
    """发送消息到 Telegram"""
    try:
        url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
        data = {
            "chat_id": CHAT_ID,
            "text": message,
            "parse_mode": "HTML"
        }
        response = requests.post(url, data=data)
        if response.status_code != 200:
            raise Exception(f"发送失败: {response.text}")
    except Exception as e:
        print(f"发送消息出错: {str(e)}")

def main():
    print("开始监控 IP 变化...")
    last_ip = None
    
    # 创建存储最后一个 IP 的文件
    ip_file = "last_ip.txt"
    
    # 如果文件存在,读取上次的 IP
    if os.path.exists(ip_file):
        with open(ip_file, 'r') as f:
            last_ip = f.read().strip()
    
    while True:
        try:
            current_ip = get_current_ip()
            
            if current_ip and current_ip != last_ip:
                # IP 发生变化
                timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                message = f"📢 Tim叔叔的TW VPS的IP 地址已更新\n\n" \
                         f"⏰ 时间: {timestamp}\n" \
                         f"🔄 新 IP: <code>{current_ip}</code>\n"
                
                if last_ip:
                    message += f"📍 旧 IP: <code>{last_ip}</code>"
                
                # 发送到 Telegram
                send_telegram_message(message)
                
                # 更新最后的 IP
                last_ip = current_ip
                
                # 保存到文件
                with open(ip_file, 'w') as f:
                    f.write(current_ip)
                
                print(f"IP 已更新: {current_ip}")
            
            # 等待一段时间再检查
            time.sleep(60)  # 每分钟检查一次
            
        except Exception as e:
            print(f"发生错误: {str(e)}")
            time.sleep(60)  # 发生错误时等待一分钟后重试

if __name__ == "__main__":
    main()

安装依赖

pip3 install requests

给脚本添加执行权限

chmod +x ip_monitor.py

运行脚本

python3 ip_monitor.py

为了让脚本在后台持续运行,我们可以使用 screensystemd。我建议使用 systemd,这样更可靠

nano /etc/systemd/system/ip-monitor.service
[Unit]
Description=IP Monitor Service
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/python3 /root/ip_monitor.py
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

启动服务

# 重新加载 systemd
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start ip-monitor

# 设置开机自启
sudo systemctl enable ip-monitor

检查服务状态

systemctl status ip-monitor

查看日志

journalctl -u ip-monitor -f

Share

You may also like...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注