From bc7675926229dc2d5a004df30c6f42471e4fe362 Mon Sep 17 00:00:00 2001 From: hotyue <52734432+hotyue@users.noreply.github.com> Date: Wed, 1 Apr 2026 07:23:23 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20V3.0=20=E6=9E=B6=E6=9E=84=E5=A4=A7?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=20-=20=E5=BC=95=E5=85=A530=E5=88=86=E9=92=9F?= =?UTF-8?q?=E9=AB=98=E9=A2=91=E8=B0=83=E5=BA=A6=E4=B8=8E=20TG=20=E4=BA=92?= =?UTF-8?q?=E5=8A=A8=E5=AE=88=E6=8A=A4=E7=9C=8B=E9=97=A8=E7=8B=97=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/install.sh | 47 +++++++++++++++++++---------- core/mod_google.sh | 11 ++++--- core/runner.sh | 4 +-- core/tg_daemon.sh | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 21 deletions(-) create mode 100644 core/tg_daemon.sh diff --git a/core/install.sh b/core/install.sh index b912177..2bdcde1 100644 --- a/core/install.sh +++ b/core/install.sh @@ -1,8 +1,8 @@ #!/bin/bash # ========================================================== -# 脚本名称: install.sh (IP-Sentinel 一键部署脚本) -# 核心功能: 解析 JSON 冷数据固化到本地,配置静默守护任务 +# 脚本名称: install.sh (IP-Sentinel 一键部署脚本 V3.0 终极版) +# 核心功能: 解析 JSON 冷数据、部署核心引擎、配置高频调度与互动守护 # ========================================================== # 你的专属 Forgejo 仓库 Raw 数据直链前缀 @@ -15,15 +15,15 @@ echo " 🛡️ 欢迎使用 IP-Sentinel (VPS IP 自动养护哨兵)" echo "========================================================" # 1. 依赖检查与安装 -echo -e "\n[1/6] 正在安装必要环境依赖 (curl, jq, cron)..." +echo -e "\n[1/6] 正在安装必要环境依赖 (curl, jq, cron, procps)..." if [ -f /etc/debian_version ]; then apt-get update -y >/dev/null 2>&1 - apt-get install -y curl jq cron >/dev/null 2>&1 + apt-get install -y curl jq cron procps >/dev/null 2>&1 elif [ -f /etc/redhat-release ]; then - yum install -y curl jq cronie >/dev/null 2>&1 + yum install -y curl jq cronie procps-ng >/dev/null 2>&1 systemctl enable crond && systemctl start crond else - echo "⚠️ 未知系统,请确保已手动安装 curl 和 jq" + echo "⚠️ 未知系统,请确保已手动安装 curl, jq 和 pgrep" fi # 2. 本地工作目录初始化 @@ -42,7 +42,7 @@ case ${REGION_CHOICE:-1} in *) REGION_CODE="JP" ;; esac -echo -e "\n[3/6] 是否配置 Telegram 机器人每日播报?(y/n)" +echo -e "\n[3/6] 是否配置 Telegram 机器人进行互动控制与战报接收?(y/n)" read -p "请输入选择 [y/n] (默认n): " TG_CHOICE TG_TOKEN="" CHAT_ID="" @@ -83,30 +83,47 @@ INSTALL_DIR="$INSTALL_DIR" LOG_FILE="${INSTALL_DIR}/logs/sentinel.log" EOF -# 5. 拉取主控代码与初始热数据 (UA池和关键词) -echo -e "\n[5/6] 正在部署核心引擎与热数据..." +# 5. 拉取全套组件 (引擎、业务、更新、战报、守护进程及热数据) +echo -e "\n[5/6] 正在部署核心引擎、互动组件与热数据..." curl -sL "${REPO_RAW_URL}/core/runner.sh" -o "${INSTALL_DIR}/core/runner.sh" curl -sL "${REPO_RAW_URL}/core/mod_google.sh" -o "${INSTALL_DIR}/core/mod_google.sh" curl -sL "${REPO_RAW_URL}/core/updater.sh" -o "${INSTALL_DIR}/core/updater.sh" +curl -sL "${REPO_RAW_URL}/core/tg_report.sh" -o "${INSTALL_DIR}/core/tg_report.sh" +curl -sL "${REPO_RAW_URL}/core/tg_daemon.sh" -o "${INSTALL_DIR}/core/tg_daemon.sh" chmod +x ${INSTALL_DIR}/core/*.sh curl -sL "${REPO_RAW_URL}/data/user_agents.txt" -o "${INSTALL_DIR}/data/user_agents.txt" curl -sL "${REPO_RAW_URL}/data/keywords/kw_${REGION_CODE}.txt" -o "${INSTALL_DIR}/data/keywords/kw_${REGION_CODE}.txt" -# 6. 配置系统定时任务 -echo -e "\n[6/6] 正在注入系统定时任务 (防并发静默调度)..." +# 6. 配置系统定时任务 (高频调度与看门狗) +echo -e "\n[6/6] 正在注入系统定时任务与看门狗进程..." crontab -l 2>/dev/null | grep -v "ip_sentinel" > /tmp/cron_backup -# 调度模块: 每4小时触发一次 (执行时由 runner.sh 控制随机休眠) -echo "0 */4 * * * ${INSTALL_DIR}/core/runner.sh >/dev/null 2>&1" >> /tmp/cron_backup -# 养料模块: 每周日凌晨 3 点静默去云端更新热数据 (关键词/UA池) +# 【升级点】核心养护模块: 改为每 30 分钟触发一次 +echo "*/30 * * * * ${INSTALL_DIR}/core/runner.sh >/dev/null 2>&1" >> /tmp/cron_backup +# 养料更新模块: 每周日凌晨 3 点静默去云端更新热数据 echo "0 3 * * 0 ${INSTALL_DIR}/core/updater.sh >/dev/null 2>&1" >> /tmp/cron_backup +# 【升级点】TG 相关任务 +if [[ -n "$TG_TOKEN" ]] && [[ -n "$CHAT_ID" ]]; then + # 每天早上 8 点发送昨天的统计战报 + echo "0 8 * * * ${INSTALL_DIR}/core/tg_report.sh >/dev/null 2>&1" >> /tmp/cron_backup + # 守护进程看门狗: 每分钟检查一次 tg_daemon.sh,如果掉了就拉起来 + echo "* * * * * pgrep -f tg_daemon.sh >/dev/null || nohup bash ${INSTALL_DIR}/core/tg_daemon.sh >/dev/null 2>&1 &" >> /tmp/cron_backup + + # 安装时立刻启动一次守护进程 + pgrep -f tg_daemon.sh >/dev/null || nohup bash "${INSTALL_DIR}/core/tg_daemon.sh" >/dev/null 2>&1 & +fi + crontab /tmp/cron_backup rm -f /tmp/cron_backup echo "========================================================" echo "🎉 IP-Sentinel 部署流程彻底完成!" echo "📍 你的本地守护区域已锁定为: $REGION_NAME" -echo "⚙️ 哨兵现已潜入后台,它会像影子一样默默养护你的 IP。" +echo "⚙️ 哨兵现已开启 [每30分钟] 的高频高拟真养护循环。" +if [[ -n "$TG_TOKEN" ]]; then + echo "📱 Telegram 互动控制中心已上线!" + echo " 马上打开 TG 给你的机器人发送 /help 试试吧!" +fi echo "========================================================" \ No newline at end of file diff --git a/core/mod_google.sh b/core/mod_google.sh index 4561dba..e800e08 100644 --- a/core/mod_google.sh +++ b/core/mod_google.sh @@ -56,8 +56,9 @@ SESSION_UA=${UA_POOL[$RANDOM % ${#UA_POOL[@]}]} # 位置锁定:在基准点(比如东京新宿)附近 3 公里内随机生成本次上网的“固定咖啡馆”坐标 SESSION_BASE_LAT=$(get_random_coord $BASE_LAT 270) SESSION_BASE_LON=$(get_random_coord $BASE_LON 270) -# 随机决定本次上网深度 (4 - 8 个复合动作) -TOTAL_ACTIONS=$((4 + RANDOM % 5)) + +# 【核心升级】随机决定本次上网深度 (6 - 10 个复合动作,配合高频长效拉伸) +TOTAL_ACTIONS=$((6 + RANDOM % 5)) log "$MODULE_NAME" "INFO " "当前出网 IP: $CURRENT_V4" log "$MODULE_NAME" "INFO " "设备指纹锁定: ${SESSION_UA:0:45}..." @@ -97,9 +98,11 @@ for ((i=1; i<=TOTAL_ACTIONS; i++)); do log "$MODULE_NAME" "EXEC " "动作[$i/$TOTAL_ACTIONS]完成 | HTTP状态: $CODE | 抖动坐标: $ACTION_LAT, $ACTION_LON" - # 行为拉伸:模拟真实的阅读停顿休眠 (60-120秒) + # 【核心升级】行为拉伸:每次动作后强制休眠 90 - 150 秒 + # 结合动作总数,总耗时将稳定在 10 分钟 到 25 分钟之间 if [ $i -lt $TOTAL_ACTIONS ]; then - SLEEP_TIME=$((60 + RANDOM % 61)) + SLEEP_TIME=$((90 + RANDOM % 61)) + log "$MODULE_NAME" "WAIT " "阅读当前页面内容,模拟停留 $SLEEP_TIME 秒..." sleep $SLEEP_TIME fi done diff --git a/core/runner.sh b/core/runner.sh index e1aaa87..23a1da4 100644 --- a/core/runner.sh +++ b/core/runner.sh @@ -28,8 +28,8 @@ export -f log export CONFIG_FILE INSTALL_DIR # 3. 防僵尸网络特征 (Cron Jitter) - 核心隐蔽逻辑 -# 随机休眠 0 到 3600 秒 (1小时) 内的任意时间,彻底打散全球并发请求 -JITTER_TIME=$((RANDOM % 3600)) +# 【核心升级】配合每 30 分钟的调度周期,将随机休眠控制在 0 到 180 秒 (3分钟) 内,彻底打散全球并发请求 +JITTER_TIME=$((RANDOM % 180)) log "SYSTEM" "INFO" "主控引擎被 Cron 唤醒,进入防并发随机休眠状态: ${JITTER_TIME} 秒..." sleep $JITTER_TIME diff --git a/core/tg_daemon.sh b/core/tg_daemon.sh new file mode 100644 index 0000000..3d17cbb --- /dev/null +++ b/core/tg_daemon.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +# ========================================================== +# 脚本名称: tg_daemon.sh (Telegram 互动监听守护进程) +# 核心功能: 极低功耗长轮询监听 TG 指令,实现远程控制 +# ========================================================== + +INSTALL_DIR="/opt/ip_sentinel" +CONFIG_FILE="${INSTALL_DIR}/config.conf" +OFFSET_FILE="/tmp/ip_sentinel_tg_offset.txt" + +# 1. 环境自检 +[ ! -f "$CONFIG_FILE" ] && exit 1 +source "$CONFIG_FILE" + +# 如果没有配置 TG 机器人,则安静退出守护进程 +[ -z "$TG_TOKEN" ] || [ -z "$CHAT_ID" ] && exit 0 + +# 2. 初始化消息偏移量 (Offset) 记录文件,防止重启后重复处理老消息 +OFFSET=0 +[ -f "$OFFSET_FILE" ] && OFFSET=$(cat "$OFFSET_FILE") + +# 发送消息的快捷工具函数 +send_msg() { + curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \ + -d "chat_id=$CHAT_ID" -d "text=$1" -d "parse_mode=Markdown" > /dev/null +} + +# 3. 核心守护循环 (无限长轮询监听) +# timeout=30 表示如果没有新消息,连接会挂起 30 秒才断开重连,极大地降低了系统资源消耗 +while true; do + UPDATES=$(curl -s "https://api.telegram.org/bot${TG_TOKEN}/getUpdates?offset=${OFFSET}&timeout=30") + + # 使用 jq 检查是否有新消息返回 + COUNT=$(echo "$UPDATES" | jq -r '.result | length' 2>/dev/null) + + if [[ "$COUNT" =~ ^[0-9]+$ ]] && [ "$COUNT" -gt 0 ]; then + for (( i=0; i<$COUNT; i++ )); do + UPDATE_ID=$(echo "$UPDATES" | jq -r ".result[$i].update_id") + MSG_CHAT_ID=$(echo "$UPDATES" | jq -r ".result[$i].message.chat.id") + MSG_TEXT=$(echo "$UPDATES" | jq -r ".result[$i].message.text") + + # 【安全防御】严格权限验证:只响应你部署时填入的 Chat ID,无视陌生人消息 + if [ "$MSG_CHAT_ID" == "$CHAT_ID" ]; then + case "$MSG_TEXT" in + "/run") + send_msg "🚀 **[指令下达]** 正在后台立即触发 IP 养护任务..." + # 使用 nohup 另起后台独立进程运行,防止阻塞当前监听器的循环 + nohup bash "${INSTALL_DIR}/core/mod_google.sh" >/dev/null 2>&1 & + ;; + "/log") + LOG_DATA=$(tail -n 15 "${INSTALL_DIR}/logs/sentinel.log") + send_msg "📄 **[最近 15 行系统日志]**%0A\`\`\`log%0A${LOG_DATA}%0A\`\`\`" + ;; + "/report") + # 触发生成一次战报 + bash "${INSTALL_DIR}/core/tg_report.sh" + ;; + "/help"|"/start") + HELP_MSG="🛡️ **IP-Sentinel 控制台**%0A/run - 立刻执行一次养护%0A/log - 抓取最新运行日志%0A/report - 手动生成统计简报" + send_msg "$HELP_MSG" + ;; + esac + fi + + # 记录处理完毕的 message ID,下次请求从新的 ID 开始获取 + OFFSET=$((UPDATE_ID + 1)) + echo "$OFFSET" > "$OFFSET_FILE" + done + fi + # 基础安全延时,防止极端网络情况下的死循环吃光 CPU + sleep 2 +done \ No newline at end of file