OpenWrt 路由器定时测速获得优质 IP 并替换指定 PassWall 节点 IP 的脚本
likefu40 opened this issue · 53 comments
#!/bin/bash
# 进入 CloudflareST 目录(脚本示例中的 CloudflareST 位于 /root/CloudflareST 目录下,不一样的话自己改这里)
# 之所以要进入文件夹去执行,是为了以相对路径运行,对于新手使用来说能避免很多路径方面问题的出现
cd /root/CloudflareST
# 运行 CloudflareST 测速(自行根据需求修改参数)
./CloudflareST -tll 90
# 获取最快 IP(从 result.csv 结果文件中获取第一个 IP)
IP=$(sed -n "2,1p" result.csv | awk -F, '{print $1}')
# 判断一下是否成功获取到了最快 IP(如果没有就退出脚本):
[[ -z "${IP}" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
# 修改 passwall 里对应节点的 IP(XXXXXX 就是节点 ID)
uci set passwall.XXXXXX.address="${IP}"
# 最后再重启一下 passwall
uci commit passwall
/etc/init.d/haproxy restart
/etc/init.d/passwall restart
将这个脚本添加到 crontab 中定时运行即可。
至于 CloudflareST 文件如何下载解压使用可以参考项目说明中写的 Linux 使用示例。
# 如何获取 PassWall 节点 ID?
查看 PassWall 配置文件:
cat /etc/config/passwall
每个节点配置顶部都有一行 config nodes 'XXXXXX' ,其中 XXXXXX 就是节点 ID。
上面是我自己鼓捣的,我本人小小白没学过 linux 各种命令,我知道我写的 shell 不对,需要检测上一个 shell 是否完成才能赋值,赋值我也不会(已经帮忙修改)。求助路过的大佬指点迷津。我就是想实现利用脚本定时筛选 IP 替换翻墙用的 IP 节点!
我之前用的是 https://github.com/badafans/better-cloudflare-ip
你这是现成的脚本?还是命令步骤?给我看蒙了都。。。颠三倒四的感觉。。。
我以前给一个 openwrt 上用 passwall 的也折腾过,不过我对 openwrt 不熟悉,只是帮写了个脚本,并远程协助配置了下。。。
你想要表达的意思是不是这个:
运行 CloudflareST 测速(注意 -tp 默认值就是 443 因此可以省略),
/root/CloudflareST/CloudflareST -tll 90
获取最快 IP,
IP=$(sed -n "2,1p" /root/CloudflareST/result.csv | awk -F, '{print $1}')
然后判断一下是否获取到了最快 IP(如果没有就退出脚本):
[[ -z "${IP}" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
然后这样修改 passwall 里的 IP?
uci set passwall.xxxxxxxxxxxxx.address=IP
最后再重启一下?
uci commit passwall
/etc/init.d/haproxy restart
/etc/init.d/passwall restart
感谢大佬,openwrt也是linux系统吧。怎么感觉好像没有测速吧,我试了可以很快就完成替换。还是很感谢你抽时间帮助
有需要,我可以提供远程协助帮忙解决一些问题,虽然我对 openwrt 不熟,但是对 Linux、Shell 脚本什么的比较熟。
顺便可以帮你完善一下脚本,这样这个 Issues 也能帮到后来者~
远程协助软件(这个是只有被控功能的单文件版),告诉我你的设备代码、临时密码(我看到后会删除)。
https://dl.todesk.com/windows/ToDesk_Lite.exe
你发的是 better-cloudflare-ip 项目的脚本文件呀。。。
可是你发的这个脚本我和项目也没啥关系呀。。。
里面压根都没有 CloudflareST。
就是用的那位大佬的,直接筛选后借用获取的赋值直接替换 passwall节点ip 用trojan-go 搭配cf的优选节点可以实现本地加速。我是看到你的脚本,想到能不能同样的实现替换ip。没别的意思。
只用我的 CloudflareST 的话,脚本不需要这么长,几行代码最多十几行就写完了。
我前面(3L)就已经把需要的脚本核心代码都写出来了,组合起来就差不多能用了。
另外,如果以绝对路径运行 CloudflareST,那么就需要手动指定绝对路径的 -f
、-o
参数,否则软件会因为找不到 ip.txt 而报错
那位大佬的脚本,每次只能测试100个ip。是的我也只是想试试,能不能实现。可是发现我没基础,鼓捣半天也没成功
我看到你的项目,确实能更少的代码就能实现,还是多谢您的帮助
如果你完全没有 Shell 基础的话,那就别折腾了,我直接远程协助帮你写脚本 + 配置好,节省双方时间(相比直接教你而言)。
再次感谢大佬热情执着的帮助,用大佬的脚本,简短的命令就能实现 在openwrt 定时筛选cf本地最优ip 并替换passwall的trojan-go vless ws协议的ip地址,加速。让垃圾,晚高峰获得更优速度!大佬很耐心细心!!!!再次感谢。大佬已经把脚本完善,太贴心了!!!!!
非常感谢,已用上
likefu40,分享一下脚本?
#!/bin/bash
sleep 8s
/etc/init.d/haproxy stop
/etc/init.d/passwall stop
# 进入 CloudflareST 目录
cd /root/CloudflareST
# 运行 CloudflareST 测速(脚本示例中的 CloudflareST 位于 /root/CloudflareST 目录下)
./CloudflareST -tll 90
# 获取最快 IP
IP=$(sed -n "2,1p" result.csv | awk -F, '{print $1}')
# 判断一下是否成功获取到了最快 IP(如果没有就退出脚本):
[[ -z "${IP}" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
# 修改 passwall 里对应节点的 IP(XXX 就是节点 ID)
uci set passwall.xxxxxxx.address="${IP}"
uci commit passwall
/etc/init.d/haproxy restart
/etc/init.d/passwall restart
exit
#!/bin/bash sleep 8s /etc/init.d/haproxy stop /etc/init.d/passwall stop # 进入 CloudflareST 目录 cd /root/CloudflareST # 运行 CloudflareST 测速(脚本示例中的 CloudflareST 位于 /root/CloudflareST 目录下) ./CloudflareST -tll 90 # 获取最快 IP IP=$(sed -n "2,1p" result.csv | awk -F, '{print $1}') # 判断一下是否成功获取到了最快 IP(如果没有就退出脚本): [[ -z "${IP}" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0 # 修改 passwall 里对应节点的 IP(XXX 就是节点 ID) uci set passwall.xxxxxxx.address="${IP}" uci commit passwall /etc/init.d/haproxy restart /etc/init.d/passwall restart exit
passwall支持路由器自身代理为gfw模式,这样就不用筛选ip时停止passwall了!
为什么不用这个?随固件编译进去就完事
这个很有用,谢谢了
SSR-PLUS要怎么弄呢?
./CloudflareST -tll 90 -p 30 输出结果没有显示30条测试结果?
@peter2022 你的最终测速结果数量 >= 30 条,才能显示出来 30 条。
#!/bin/bash
# sleep 8s
bash /etc/init.d/haproxy stop
bash /etc/init.d/passwall stop
# 进入 CloudflareST 目录
# cd /root/CloudflareST
# 运行 CloudflareST 测速(脚本示例中的 CloudflareST 位于 /root/CloudflareST 目录下)
/root/CloudflareST/CloudflareST -f ip.txt -o result.csv -tll 90 -p 30 -url https://***.workers.dev/200mb.test
# 获取最快 IP
IP=$(sed -n "2,1p" /root/CloudflareST/result.csv | awk -F, '{print $1}')
# 判断一下是否成功获取到了最快 IP(如果没有就退出脚本):
[[ -z "${IP}" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
# 修改 passwall 里对应节点的 IP(XXX 就是节点 ID)
uci set passwall.***.address="${IP}"
uci commit passwall
bash /etc/init.d/haproxy restart
bash /etc/init.d/passwall restart
exit
麻烦帮我看看我改的代码,放入n1的openwrt 提示
open ip.txt: no such file or directory
uci: Parse error
需要加什么参数才能测试30个以上的Ip 啊?
@peter2022 你的最终测速结果数量 >= 30 条,才能显示出来 30 条。
@peter2022 这就是我说过的绝对路径、相对路径的问题,你没明白它们的区别就去修改 1L 的脚本就是这结果。。。
你用的是绝对路径,而默认的 -f ip.txt
-o result.csv
参数都是相对路径(相对于执行脚本的目录,而不是程序所在目录),改回相对路径就行了(或者把 -f
-o
参数中的文件名改为绝对路径)。
# 进入 CloudflareST 目录
cd /root/CloudflareST
# 运行 CloudflareST 测速(脚本示例中的 CloudflareST 位于 /root/CloudflareST 目录下)
./CloudflareST -f ip.txt -o result.csv -tll 90 -p 30 -url https://***.workers.dev/200mb.test
我写的脚本,每一行都是有其意义的,如果不清楚不要乱改。。。
#!/bin/bash
# sleep 8s
bash /etc/init.d/haproxy stop
bash /etc/init.d/passwall stop
# 进入 CloudflareST 目录
cd /root/CloudflareST
# 运行 CloudflareST 测速(脚本示例中的 CloudflareST 位于 /root/CloudflareST 目录下)
./CloudflareST -f ip.txt -o result.csv -tll 90 -p 30 -url https://***.workers.dev/200mb.test
# 获取最快 IP
IP=$(sed -n "2,1p" /root/CloudflareST/result.csv | awk -F, '{print $1}')
# 判断一下是否成功获取到了最快 IP(如果没有就退出脚本):
[[ -z "${IP}" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
# 修改 passwall 里对应节点的 IP(XXX 就是节点 ID)
uci set passwall.***.address="${IP}"
uci commit passwall
bash /etc/init.d/haproxy restart
bash /etc/init.d/passwall restart
exit
我一开始时按照1L的代码执行的,但是出现如下提示。不知道问题出在什么地方。。。。我看第6 8行没问题啊
你解释的很清楚,我没有注意看,也有一种方法就是把 ip.txt 和 result.csv 放到root下一份,也就是执行脚本下一份。
请问你的这个执行脚本CloudflareST 必须通过另一个脚本来调用吗?可以将上面的代码写入到你的脚本里吗?也就是一个脚本来运行。
root@n1:~# chmod +x cf-auto-passwall.sh && bash cf-auto-passwall.sh
cf-auto-passwall.sh: line 6: cd: $'/root/CloudflareST\r': No such file or directory
cf-auto-passwall.sh: line 8: ./CloudflareST: Is a directory
uci: Parse error
@peter2022 看起来像是行尾序列的问题(看到了 \r 字符)。
Windows 和 Linux 的行尾序列不一样(也可以叫做换行符)。
Windows 是 \r\n
而 Linux 则是 \n
,这些字符默认是不可见的,是用来表示该行到头了要换行了。
# 比如在 Windows 下,你看到的
cd /root/CloudflareST
# 实际上是这样(Windows 会自动忽略 \r\n 换行符):
cd /root/CloudflareST\r\n
# 但是如果将这个直接写入到 Linux 系统的脚本中,你看起来是这样的:
cd /root/CloudflareST
# 但实际上在 Linux 看来是这样的:
cd /root/CloudflareST\r\n
# 在运行该命令时,Linux 会照例自动忽略 \n 换行符,因此最终会被当成这样去执行:
cd /root/CloudflareST\r
你这种情况,可能是编辑脚本时用的是 Windows 编辑器,或者直接在复制粘贴的,都默认用的是 Windows 的 \r\n。
解决方法有很多,比如:
- 使用支持修改行尾序列(换行符格式)的 Windows 编辑器。
- 直接用 SSH 在 Linux 系统下用命令行编辑操作(建议先删除文件,再去新建并写入脚本)。
另外,Windows 自带的记事本虽然不能修改,但能显示文件当前的行尾序列(右下角状态条 CRLF、LF 对应 \r\n、\n)。
你说的这个脚本调用什么,我无法理解你要表达什么意思。
另外,对于多行代码,要用 3 个 ` 符号(即 ``` )包裹代码才行。
/etc/init.d/haproxy stop
/etc/init.d/passwall stop
请问这两个命令,停止pw 和ha后,跑CloudflareST,延迟测速跑得非常快,下载测速测出的速度也就在10-20M之间,pw基本设置-模式-tcp udp的模式选择**列表以外。
当选择pw的tcp udp的模式(或者路由器自身 TCP UDP代理模式 gfw) 选择gfw列表时,延迟和下载都正常。
请问passwall stop 无效吗? 问题出在哪里?
@peter2022 你的意思是:
当代理模式为:**列表以外
时(白名单),无论是否关闭代理插件都会导致 CloudflareST 测速异常?(请贴出测速结果内容
当代理模式为:GFW 列表
时(黑名单),无论是否关闭代理插件都测速正常?(请贴出测速正常时的结果内容
当代理模式为:**列表以外
时(白名单),结果如下:
IP 地址 已发送 已接收 丢包率 平均延迟 下载速度 (MB/s)
162.159.200.254 4 4 0.00 90.08 3.89
162.158.238.42 4 4 0.00 90.29 3.89
104.27.94.153 4 4 0.00 90.26 3.88
104.21.68.180 4 4 0.00 90.09 3.88
162.159.124.188 4 4 0.00 90.04 3.88
198.41.132.146 4 4 0.00 90.14 3.87
104.16.54.124 4 4 0.00 90.30 3.87
162.158.133.103 4 4 0.00 90.06 3.87
198.41.193.203 4 4 0.00 90.15 3.87
104.16.113.204 4 4 0.00 90.13 3.87
但是当使用白名单时,路由的代理模式改为黑名单,就跟下面的效果一样,都好用。
当代理模式为:GFW 列表
时(黑名单), 结果正常,平均延迟 90 ~ 250ms 下载速度也是 30MB/s+
bash /etc/init.d/haproxy stop
bash /etc/init.d/passwall stop
cd /root/CloudflareST
./CloudflareST -tll 90 -tl 250 -dn 15 -url ***200mb.test
IP=$(sed -n "2,1p" result.csv | awk -F, '{print $1}')
[[ -z "${IP}" ]] && echo "CloudflareST ${IP} Error" && exit 0
uci set passwall.***.address="${IP}"
uci commit passwall
bash /etc/init.d/haproxy restart
bash /etc/init.d/passwall restart
@peter2022 很显然,白名单模式时(**列表以外)所有名单外的链接全部走代理了。
因此你可能需要把所有 Cloudflare IP 及 下载测速地址的域名都加入白名单中,但是这样可能会导致你访问使用 Cloudflare CDN 的网站时,可能不会走代理?具体我不清楚你用的代理软件逻辑是什么。
对于 PassWall 相关问题,我完全不清楚,无法给予帮助。
passwall支持路由器自身代理为gfw模式,这样就不用筛选ip时停止passwall了!
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os
import sys
import csv
def get_ip(filecsv): # 读取CSV文件并转换为字典并将key为'IP 地址'中的IP地址全部读取到一个列表并返回。
with open(filecsv, 'r', encoding='utf8') as f:
result = [i['IP 地址'] for i in csv.DictReader(f)]
return result
def get_nodesid(): # 通过传入参数中输入的节点名称查询该节点在passwalll2中的唯一ID。
return os.popen(f"uci show passwall2 | grep -w {sys.argv[1]}").readlines()[0][10:42]
def get_bestip(ip): # 传入一个IP与目前在用的IP进行对比测速,返回最优IP。
oldip = os.popen(f"uci get passwall2.{get_nodesid()}.address").readlines()[0][:-1] # 查询节点目前在用的优选IP。
with open('1.txt', 'w+', encoding='utf8') as f:
f.write(oldip + '\n' + ip)
os.system("./CloudflareST -o bestip.csv -f 1.txt >/dev/null 2>&1")
result = get_ip('bestip.csv')[0]
return result
def main():
os.chdir("/root/CloudflareST") # 修改工作目录
os.system("uci set passwall2.@global[0].localhost_proxy='0' && uci commit passwall2") # 关闭'路由器本机代理'功能
os.system("/etc/init.d/passwall2 restart && ./CloudflareST -tll 100 >/dev/null 2>&1")
try:
os.system(f"uci set passwall2.{get_nodesid()}.address='{get_bestip(get_ip('result.csv')[0])}'")
except IndexError:
pass
finally:
os.system("uci set passwall2.@global[0].localhost_proxy='1'")
os.system("uci commit passwall2 && /etc/init.d/passwall2 restart")
if __name__ == '__main__':
main()
根据上面写了一个python脚本用于passwall2,每次测速后都会对result.csv的第一个IP和目前在用的IP在进行一次对比测速,新IP优于旧IP才会替换掉旧的。
食用步骤:
1.把上面脚本保存为xxx.py,并和作者大大CloudflareST的所有文件一并丢到/root/CloudflareST目录下并chmod +x /root/CloudflareST/CloudflareST
2.运行python xxx.py 节点名称,例如你节点名称是abcd则运行python xxx.py abcd
3.因为作者大大内置的测速地址并不稳定,建议使用自建的测速地址,可以在22和30行处添加 -url https://xxxxx
SSR怎么写?
SSR怎么写?
是passwall2里面用SSR?SSR不能用CDN吧?
SSR怎么写?
是passwall2里面用SSR?SSR不能用CDN吧?
他意思是ShadowSocksR Plus+这个插件要怎么写把
SSR怎么写?
SSRP+还没用过,没有写呢,目前只写了passwall、passwall2、openclash的脚本。
SSR怎么写?
SSRP+还没用过,没有写呢,目前只写了passwall、passwall2、openclash的脚本。
请问openclash如何用?
SSR怎么写?
SSRP+还没用过,没有写呢,目前只写了passwall、passwall2、openclash的脚本。
请问openclash如何用?
中秋假期出去玩了,我节后给你。
SSR怎么写?
SSRP+还没用过,没有写呢,目前只写了passwall、passwall2、openclash的脚本。
请问openclash如何用?
中秋假期出去玩了,我节后给你。
openclash要是能不停止就好了,不知道有什么办法能让这个测速脚本不走openclash
'''
SSR怎么写?
SSRP+还没用过,没有写呢,目前只写了passwall、passwall2、openclash的脚本。
请问openclash如何用?
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os
import sys
import csv
import re
def get_ip(filecsv):
with open(filecsv, 'r', encoding='utf8') as f:
result = [i['IP 地址'] for i in csv.DictReader(f)]
return result
def get_nodesid(name):
result = re.search(r'\W\d(\d)?\W', os.popen(f"uci show openclash | grep -w {name}").readline()).group()
return result
def get_bestip():
cdnip = [os.popen(f"uci show openclash.@servers{get_nodesid(i)} | grep -w server=")
.readline()[28:-2] for i in sys.argv[1:]] + get_ip('result.csv')[:len(sys.argv[1:])]
with open('1.txt', 'w+', encoding='utf8') as f:
for i in cdnip:
f.write(i + '\n')
os.system("./CloudflareST -o bestip.csv -f 1.txt >/dev/null 2>&1")
result = get_ip('bestip.csv')[:len(sys.argv[1:])]
return result
def main():
os.system("/etc/init.d/openclash stop >/dev/null 2>&1")
os.system("./CloudflareST >/dev/null 2>&1")
for name, ip in zip(sys.argv[1:], get_bestip()):
os.system(f"uci set openclash.@servers{get_nodesid(name)}.server='{ip}'")
os.system("uci commit openclash && /etc/init.d/openclash start >/dev/null 2>&1")
if __name__ == '__main__':
main()
openclash节点更新cfip脚本食用步骤:
以CloudflareST的目录为/root/CloudflareST,openclash里面有2个节点套了cf的ip,节点名称(别名)分别为s1和s2为例子
1、将上面的脚本保存为CloudflareST_openclash.py并放到CloudflareST文件夹中
2、进入到CloudflareST目录执行chmod +x CloudflareST
3、cd /root/CloudflareST && python CloudflareST_openclash.py s1 s2 执行这个命令进行IP的测速和更新,也可添加到计划任务里
4、建议使用自建测速地址进行测速,可在脚本的27和34行添加-url参数
PS:如果你有多个cf节点例如s1、s2、s3、s4、s5,执行cd /root/CloudflareST && python CloudflareST_openclash.py s1 s2 s3 s4 s5
如果只有一个s1节点就执行cd /root/CloudflareST && python CloudflareST_openclash.py s1
脚本需要配合作者的CloudflareST使用且openwrt上有python3,请下载对应你路由CPU版本的CloudflareST,例如arm、mipsle、amd64等等,openclash里面可以查看路由处理器架构。
脚本原理:根据你输入的节点数量(例如5个)取result.csv里面前5位ip,并和目前在用的5个节点的ip再次进行ip优选,再取结果的前5的IP地址更新到openclash的5个节点。
SSR怎么写?
SSRP+还没用过,没有写呢,目前只写了passwall、passwall2、openclash的脚本。
请问openclash如何用?
中秋假期出去玩了,我节后给你。
openclash要是能不停止就好了,不知道有什么办法能让这个测速脚本不走openclash
那估计是openclash的bug了,只能等作者慢慢修复了,笑哭~
SSR怎么写?
SSRP+还没用过,没有写呢,目前只写了passwall、passwall2、openclash的脚本。
请问openclash如何用?
中秋假期出去玩了,我节后给你。
openclash要是能不停止就好了,不知道有什么办法能让这个测速脚本不走openclash
那估计是openclash的bug了,只能等作者慢慢修复了,笑哭~
别用这个了,直接上歇斯底里协议,udp速度很快
SSR怎么写?
SSRP+还没用过,没有写呢,目前只写了passwall、passwall2、openclash的脚本。
请问openclash如何用?
中秋假期出去玩了,我节后给你。
openclash要是能不停止就好了,不知道有什么办法能让这个测速脚本不走openclash
那估计是openclash的bug了,只能等作者慢慢修复了,笑哭~
别用这个了,直接上歇斯底里协议,udp速度很快
我今年年初才从ssr换到xray,暂时不打算换了。而且hysteria不支持CDN,IP有概率被ban掉,换IP也麻烦。
有需要,我可以提供远程协助帮忙解决一些问题,虽然我对 openwrt 不熟,但是对 Linux、Shell 脚本什么的比较熟。
顺便可以帮你完善一下脚本,这样这个 Issues 也能帮到后来者~
远程协助软件(这个是只有被控功能的单文件版),告诉我你的设备代码、临时密码(我看到后会删除)。 https://dl.todesk.com/windows/ToDesk_Lite.exe
我想加你的微信让你协助一下,不知道怎么加。我不懂操作,现在IP每天手动扫描添加真的是太麻烦。
如果你完全没有 Shell 基础的话,那就别折腾了,我直接远程协助帮你写脚本 + 配置好,节省双方时间(相比直接教你而言)。
远程也可以,不知道你什么时候有时间?
#!/bin/bash
[[ ! -d "/paniy/cloudflare" ]] && mkdir -p /paniy/cloudflare
cd /paniy/cloudflare
opkg install jq
arch=$(uname -m)
if [[ ${arch} =~ "x86" ]]; then
tag="amd"
[[ ${arch} =~ "64" ]] && tag="amd64"
elif [[ ${arch} =~ "aarch" ]]; then
tag="arm"
[[ ${arch} =~ "64" ]] && tag="arm64"
else
exit 1
fi
version=$(curl -s https://api.github.com/repos/XIU2/CloudflareSpeedTest/tags | jq -r .[].name | head -1)
old_version=$(cat CloudflareST_version.txt )
if [[ ! -f "CloudflareST" || ${version} != ${old_version} ]]; then
rm -rf CloudflareST_linux_${tag}.tar.gz
wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/${version}/CloudflareST_linux_${tag}.tar.gz
echo "${version}" > CloudflareST_version.txt
tar -xvf CloudflareST_linux_${tag}.tar.gz
chmod +x CloudflareST
fi
##注意修改!!!
/etc/init.d/haproxy stop
/etc/init.d/passwall stop
wait
./CloudflareST -dn 10 -tll 40 -o cf_result.txt
wait
sleep 3
if [[ -f "cf_result.txt" ]]; then
first=$(sed -n '2p' cf_result.txt | awk -F ',' '{print $1}') && echo $first >>ip-all.txt
second=$(sed -n '3p' cf_result.txt | awk -F ',' '{print $1}') && echo $second >>ip-all.txt
third=$(sed -n '4p' cf_result.txt | awk -F ',' '{print $1}') && echo $third >>ip-all.txt
wait
uci commit passwall
wait
##注意修改!!!
sed -i "s/$(uci get passwall.xxxxxxxxxx.address)/${first}/g" /etc/config/passwall
sed -i "s/$(uci get passwall.xxxxxxxxxx.address)/${second}/g" /etc/config/passwall
sed -i "s/$(uci get passwall.xxxxxxxxxx.address)/${third}/g" /etc/config/passwall
wait
uci commit passwall
wait
[[ $(/etc/init.d/haproxy status) != "running" ]] && /etc/init.d/haproxy start
wait
[[ $(/etc/init.d/passwall status) != "running" ]] && /etc/init.d/passwall start
# wait
# if [[ -f "ip-all.txt" ]]; then
# sort -t "." -k4 -n -r ip-all.txt >ip-all-serialize.txt
# uniq -c ip-all.txt ip-mediate.txt
# sort -r ip-mediate.txt >ip-statistics.txt
# rm -rf ip-mediate.txt
# fi
fi
CloudflareST这两天测速都是0,但脚本照样替换了PASSWALL的IP,大神有没有解决方法?
运行完之后出现:Command failed: Not found
#!/bin/bash
sleep 8s
/etc/init.d/haproxy stop
/etc/init.d/passwall stop
进入 CloudflareST 目录
cd /root/CloudflareST
运行 CloudflareST 测速(脚本示例中的 CloudflareST 位于 /root/CloudflareST 目录下)
./CloudflareST -tll 90
获取最快 IP
IP=$(sed -n "2,1p" result.csv | awk -F, '{print $1}')
判断一下是否成功获取到了最快 IP(如果没有就退出脚本):
[[ -z "${IP}" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
修改 passwall 里对应节点的 IP(XXX 就是节点 ID)
uci set passwall.xxxxxxx.address="${IP}"
uci commit passwall
/etc/init.d/haproxy restart
/etc/init.d/passwall restart
exit
最后重启代码 /etc/init.d/passwall restart
最近openwrt 发现无法重启 以前正常
不知道怎么修改
大佬这 两个SED命令 是代表什么意思能不能说下 谢谢!
sed -n "2,1p" awk -F, '{print $1}
2,1p 和 print $1 ??
建议大家不必用每天跑测速了,目前本人已使用openclash,meta内核可以使用grpc协议,可以找出大概尽可能快的cf-ip,让clash自动检测IP延迟来切换节点!