diff --git a/choose.sh b/choose.sh new file mode 100644 index 0000000..1471cc0 --- /dev/null +++ b/choose.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# 以下变量需要填写 +API_KEY="your_cloudflare_api_key" +EMAIL="your_email@example.com" +RECORD_ID="your_dns_record_id" +ZONE_ID="your_zone_id" +DOMAIN="your_domain.com" +SUBDOMAIN="sub.your_domain.com" +SCAN_PROGRAM_PATH="your_scan_program_path" + +# 克隆git仓库 +git clone https://git.18g.me/feiwujia/iplist || { echo "Git clone failed"; exit 1; } + +# 进入iplist目录 +cd iplist || { echo "Change directory failed"; exit 1; } + +# 创建result文件夹 +mkdir -p result || { echo "Create result folder failed"; exit 1; } + +# 创建use文件夹 +mkdir -p use || { echo "Create use folder failed"; exit 1; } + +# 计算文件的行数 +total_lines=$(cat result/*.csv | wc -l) + +# 遍历iplist目录中的所有txt文件 +for file in *.txt +do + # 对每个txt文件执行scan_linux_amd64命令,输出结果到result文件夹中的csv文件 + $SCAN_PROGRAM_PATH -c 2000 -t 5 -o result/result_${file%.txt}.csv $file || { echo "scan program failed"; exit 1; } + + # 从csv文件中读取每一行,并显示进度 + cat "result/result_${file%.txt}.csv" | pv -l -s $total_lines | while IFS= read -r line + do + # 将每一行分割成多个字段 + IFS=',' read -ra fields <<< "$line" + # 遍历每个字段 + for field in "${fields[@]}" + do + # 去除字段两边的空格 + field=$(echo $field | xargs) + # 检查字段是否为有效的IPv4地址 + if [[ $field =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + # 使用curl命令测试ip地址 + status_code=$(curl --resolve cloudflare.com:443:$field --insecure https://cloudflare.com/cdn-cgi/trace -o /dev/null -w '%{http_code}' -s) + # 如果状态码为200,将ip地址保存到use.txt文件中 + if [ "$status_code" -eq 200 ] + then + echo "IP $field is available" + echo $field >> use/use.txt + else + echo "IP $field is not available" + fi + else + # 如果字段不是有效的IPv4地址,跳出循环 + break + fi + done + done +done + +# 从use/use.txt文件中读取IP地址,并使用Cloudflare API更新DNS记录 +while IFS= read -r ip +do + # 使用Cloudflare API更新DNS记录 + curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}" \ + -H "X-Auth-Email: ${EMAIL}" \ + -H "X-Auth-Key: ${API_KEY}" \ + -H "Content-Type: application/json" \ + --data '{"type":"A","name":"'${SUBDOMAIN}'","content":"'${ip}'","ttl":1,"proxied":false}' || { echo "curl failed"; exit 1; } +done < use/use.txt + +# 删除iplist文件夹 +cd .. && rm -rf iplist || { echo "Remove iplist folder failed"; exit 1; } +