|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
# ========== 参数解析 ==========
|
|
|
|
|
|
PROXY_ARG=""
|
|
|
|
|
|
while getopts ":x:" opt; do
|
|
|
|
|
|
case $opt in
|
|
|
|
|
|
x)
|
|
|
|
|
|
# 注意去除前面的等号(比如 -x=http://... 传入时可能带=)
|
|
|
|
|
|
proxy_val="${OPTARG#*=}"
|
|
|
|
|
|
if [[ -z "$proxy_val" ]]; then
|
|
|
|
|
|
proxy_val="$OPTARG"
|
|
|
|
|
|
fi
|
|
|
|
|
|
PROXY_ARG="--proxy $proxy_val"
|
|
|
|
|
|
echo "✅ 使用代理:$proxy_val"
|
|
|
|
|
|
;;
|
|
|
|
|
|
*)
|
|
|
|
|
|
echo "❌ 未知参数"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
;;
|
|
|
|
|
|
esac
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
# ========== 路径定义 ==========
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
|
|
YAML_FILE="$SCRIPT_DIR/../source/webfuzz.yaml"
|
|
|
|
|
|
RESULT_FILE="$SCRIPT_DIR/result.log"
|
|
|
|
|
|
|
|
|
|
|
|
if [ ! -f "$YAML_FILE" ]; then
|
|
|
|
|
|
echo "❌ 节点列表文件不存在:$YAML_FILE"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# ========== 时间阈值定义 ==========
|
|
|
|
|
|
month=2592000
|
|
|
|
|
|
timestamp=$(date +%s)
|
|
|
|
|
|
lastMonth=$(( timestamp - month ))
|
|
|
|
|
|
|
|
|
|
|
|
# 初始化结果文件
|
|
|
|
|
|
echo "# 自动检测生成 $(date +%Y%m%d)" > "$RESULT_FILE"
|
|
|
|
|
|
|
|
|
|
|
|
# 获取 YAML 项数
|
|
|
|
|
|
count=$(yq e 'length' "$YAML_FILE")
|
|
|
|
|
|
|
|
|
|
|
|
# ========== 开始检测 ==========
|
|
|
|
|
|
for ((i = 0; i < count; i++)); do
|
|
|
|
|
|
item=$(yq e ".[$i]" "$YAML_FILE")
|
|
|
|
|
|
url=$(echo "$item" | yq e '.options.url' -)
|
|
|
|
|
|
|
|
|
|
|
|
echo "🔍 检测 URL: $url"
|
|
|
|
|
|
|
|
|
|
|
|
if [[ $url == https://raw.githubusercontent.com/* ]]; then
|
|
|
|
|
|
# 检查 URL 是否有效
|
|
|
|
|
|
code=$(curl $PROXY_ARG -o /dev/null -s -w "%{http_code}" "$url")
|
|
|
|
|
|
if [[ "$code" == "404" ]]; then
|
|
|
|
|
|
echo "❌ 文件不存在:$url"
|
|
|
|
|
|
continue
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# 路径解析(与 nodelist.txt 保持一致)
|
|
|
|
|
|
repo_path=$(echo "$url" | cut -d '/' -f 4,5)
|
|
|
|
|
|
repo_api="https://api.github.com/repos/$repo_path"
|
|
|
|
|
|
|
|
|
|
|
|
# 获取更新时间
|
|
|
|
|
|
response=$(curl $PROXY_ARG -s -H "User-Agent: alive-script" "$repo_api")
|
|
|
|
|
|
updated_at=$(echo "$response" | jq -r '.updated_at // empty')
|
|
|
|
|
|
|
|
|
|
|
|
if [[ -z "$updated_at" ]]; then
|
|
|
|
|
|
echo "⚠️ 无法获取更新时间:$repo_api"
|
|
|
|
|
|
continue
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# 是否在30天内
|
|
|
|
|
|
if date --version >/dev/null 2>&1; then
|
|
|
|
|
|
updated_ts=$(date -d "$updated_at" +%s)
|
|
|
|
|
|
else
|
|
|
|
|
|
updated_ts=$(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$updated_at" +%s)
|
|
|
|
|
|
fi
|
|
|
|
|
|
if [[ $updated_ts -gt $lastMonth ]]; then
|
|
|
|
|
|
echo "- type: webfuzz" >> "$RESULT_FILE"
|
|
|
|
|
|
echo " options:" >> "$RESULT_FILE"
|
|
|
|
|
|
echo " url: $url" >> "$RESULT_FILE"
|
|
|
|
|
|
echo "" >> "$RESULT_FILE"
|
|
|
|
|
|
echo "✅ 保留:$url(更新时间:$updated_at)"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "⏸️ 仓库太久未更新:$url($updated_at)"
|
|
|
|
|
|
fi
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "⛔ 暂不支持的 URL:$url"
|
|
|
|
|
|
fi
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
echo "✅ 完成。活跃条目写入:$RESULT_FILE"
|