feat: V3.0 架构大升级 - 引入30分钟高频调度与 TG 互动守护看门狗进程
This commit is contained in:
@@ -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 "========================================================"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
73
core/tg_daemon.sh
Normal file
73
core/tg_daemon.sh
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user