PassWall自动优选IP并替换

 1 #!/usr/bin/env bash
 2 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
 3 #export PATH
 4 ## --------------------------------------------------------------
 5 ##    项目: CloudflareSpeedTest 自动更新 Hosts
 6 ##    版本: 1.0.4
 7 ##    作者: XIU2
 8 ##    项目: https://github.com/XIU2/CloudflareSpeedTest
 9 ## --------------------------------------------------------------
10 #
11 #_CHECK() {
12 #    while true
13 #        do
14 #        if [[ ! -e "nowip_hosts.txt" ]]; then
15 #            echo -e "该脚本的作用为 CloudflareST 测速后获取最快 IP 并替换 Hosts 中的 Cloudflare CDN IP。\n使用前请先阅读:https://github.com/XIU2/CloudflareSpeedTest/issues/42#issuecomment-768273848"
16 #            echo -e "第一次使用,请先将 Hosts 中所有 Cloudflare CDN IP 统一改为一个 IP。"
17 #            read -e -p "输入该 Cloudflare CDN IP 并回车(后续不再需要该步骤):" NOWIP
18 #            if [[ ! -z "${NOWIP}" ]]; then
19 #                echo ${NOWIP} > nowip_hosts.txt
20 #                break
21 #            else
22 #                echo "该 IP 不能是空!"
23 #            fi
24 #        else
25 #            break
26 #        fi
27 #    done
28 #}
29 #
30 #_UPDATE() {
31 #    echo -e "开始测速..."
32 #    NOWIP=$(head -1 nowip_hosts.txt)
33 #
34 #    # 这里可以自己添加、修改 CloudflareST 的运行参数
35 #    ./CloudflareST -n 1000 -o "result_hosts.txt"
36 #
37 #    # 如果需要 "找不到满足条件的 IP 就一直循环测速下去",那么可以将下面的两个 exit 0 改为 _UPDATE 即可
38 #    [[ ! -e "result_hosts.txt" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
39 #
40 #    # 下面这行代码是 "找不到满足条件的 IP 就一直循环测速下去" 才需要的代码
41 #    # 考虑到当指定了下载速度下限,但一个满足全部条件的 IP 都没找到时,CloudflareST 就会输出所有 IP 结果
42 #    # 因此当你指定 -sl 参数时,需要移除下面这段代码开头的 # 井号注释符,来做文件行数判断(比如下载测速数量:10 个,那么下面的值就设在为 1143 #    #[[ $(cat result_hosts.txt|wc -l) > 11 ]] && echo "CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速..." && _UPDATE
44 #
45 #
46 #    BESTIP=$(sed -n "2,1p" result_hosts.txt | awk -F, '{print $1}')
47 #    if [[ -z "${BESTIP}" ]]; then
48 #        echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."
49 #        exit 0
50 #    fi
51 #    echo ${BESTIP} > nowip_hosts.txt
52 #    echo -e "\n旧 IP 为 ${NOWIP}\n新 IP 为 ${BESTIP}\n"
53 #
54 #    echo "开始备份 Hosts 文件(hosts_backup)..."
55 #    \cp -f /etc/hosts /etc/hosts_backup
56 #
57 #    echo -e "开始替换..."
58 #    sed -i 's/'${NOWIP}'/'${BESTIP}'/g' /etc/hosts
59 #    echo -e "完成..."
60 #}
61 #
62 #_CHECK
63 #_UPDATE
64 
65 
66 # 进入 CloudflareST 目录(脚本示例中的 CloudflareST 位于 /root/CloudflareST 目录下,不一样的话自己改这里)
67 # 之所以要进入文件夹去执行,是为了以相对路径运行,对于新手使用来说能避免很多路径方面问题的出现
68 cd /root/CloudflareST
69 
70 # 运行 CloudflareST 测速(自行根据需求修改参数)
71 ./CloudflareST -n 1000 -o "result_hosts.txt"
72 
73 NOWIP=$(head -1 nowip_hosts.txt)
74 # 获取最快 IP(从 result.csv 结果文件中获取第一个 IP)
75 #IP=$(sed -n “2,1p” result.csv | awk -F, ‘{print $1}’)
76 
77 # 判断一下是否成功获取到了最快 IP(如果没有就退出脚本):
78 BESTIP=$(sed -n "2,1p" result_hosts.txt | awk -F, '{print $1}')
79 if [[ -z "${BESTIP}" ]]; then
80     echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."
81     exit 0
82 fi
83 echo ${BESTIP} > nowip_hosts.txt
84 echo -e "\n旧 IP 为 ${NOWIP}\n新 IP 为 ${BESTIP}\n"
85 
86 # 修改 passwall 里对应节点的 IP(XXXXXX 就是节点 ID) 位置在/etc/config/passwall
87 uci set passwall.6ac082b4e2c445e6b6ffa9439e2883ea.address=${BESTIP}
88 
89 # 最后再重启一下 passwall
90 uci commit passwall
91 /etc/init.d/haproxy restart
92 /etc/init.d/passwall restart


定时任务:*/5 * * * *  bash /root/CloudflareST/cfst_hosts.sh > /dev/null

 

posted @ 2022-11-06 22:36  面向bug编程  阅读(1159)  评论(0编辑  收藏  举报