-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
随机数量能否加大一点了 #144
Comments
如果测试好几次都没有见到一个速度快的 IP,那要么是你的运气太差了,要么就是你与 Cloudflare 之间的网络链接质量太差了。 # 小提示:目前处于晚高峰期(已经临近 23:00~01:00 顶峰了),此时国外服务器(包括 Cloudflare) 与 中国内地之间的网络链接质量是全天最差的时候(就像上下班时的大堵车),因此找不到速度快的 IP 是很正常的。 |
如果只是要实现你的需求,其实可以用其他方案曲线解决(附带的 cfst_hosts 脚本改改就行),也不需要修改软件代码。 具体你可以参考这个 Issues #143 |
好的谢谢 |
大佬,能否麻烦你写一个完整的了,自己改老测不到自己想要速度的比如50M,他不循环测 通了哈哈 |
你这句话能读通顺么? |
看了下还有点小问题,我又在那个 Issues 下补充了一段: 补充一下,如果 脚本/CloudflareST 所在目录下已经存在 先在 CloudflareST 运行命令后面加上指定文件名的参数(文件名随意):
然后把下面一点的
|
算了,我干脆把这几个脚本文件都改了改,所有文件名都独立分开,同时把那个 |
大佬威武 |
这是正常的,当指定了下载速度下限,但一个满足全部条件的 IP 都没找到时,就会输出所有 IP 结果(这样用户才能看到测速最高值范围,以提醒用户条件设置的太高了)。 前面改脚本的时候,倒是把这个机制给忘了。。。 |
试了下,再加上一段代码判断一下结果文件的行数就行了(比如下载测速数量是 10 个,那么超过 11 行就代表没有找到一个满足全部条件的 IP,输出的是完整测速结果): ...
if "%bestip%"=="%nowip%" (
echo.
echo CloudflareST 测速结果 IP 数量为 0,跳过下面步骤...
goto :RESET
)
:: 下面这段是新加入的代码
for /f %%a in ('type result_hosts.txt') do set /a v+=1
if %v% GTR 11 (
echo.
echo CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速...
goto :RESET
)
:: 上面这段是新加入的代码
echo %bestip%>nowip_hosts.txt
echo.
echo 旧 IP 为 %nowip%
echo 新 IP 为 %bestip%
... |
我已经更新脚本了。 |
好的我下载再试下 |
我这边就指定了 1 个 IP 模拟测试,看起来正常:
|
:: --------------------------------------------------------------
:: 项目: CloudflareSpeedTest 自动更新 Hosts
:: 版本: 1.0.4
:: 作者: XIU2
:: 项目: https://github.com/XIU2/CloudflareSpeedTest
:: --------------------------------------------------------------
@echo off
Setlocal Enabledelayedexpansion
::判断是否已获得管理员权限
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
::写出 vbs 脚本以管理员身份运行本脚本(bat)
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
::如果临时 vbs 脚本存在,则删除
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
::上面是判断是否以获得管理员权限,如果没有就去获取,下面才是本脚本主要代码
::如果 nowip_hosts.txt 文件不存在,说明是第一次运行该脚本
if not exist "nowip_hosts.txt" (
echo 该脚本的作用为 CloudflareST 测速后获取最快 IP 并替换 Hosts 中的 Cloudflare CDN IP。
echo 使用前请先阅读:https://github.com/XIU2/CloudflareSpeedTest/issues/42#issuecomment-768273768
echo.
echo 第一次使用,请先将 Hosts 中所有 Cloudflare CDN IP 统一改为一个 IP。
set /p nowip="输入该 Cloudflare CDN IP 并回车(后续不再需要该步骤):"
echo !nowip!>nowip_hosts.txt
echo.
)
::从 nowip_hosts.txt 文件获取当前 Hosts 中使用的 Cloudflare CDN IP
set /p nowip=<nowip_hosts.txt
echo 开始测速...
:: 这个 RESET 是给需要 "找不到满足条件的 IP 就一直循环测速下去" 功能的人准备的
:: 如果需要这个功能就把下面 3 个 goto :STOP 改为 goto :RESET 即可
:RESET
:: 这里可以自己添加、修改 CloudflareST 的运行参数,echo.| 的作用是自动回车退出程序(不再需要加上 -p 0 参数了)
echo.|CloudflareST.exe -n 900 -sl 50 -tl 230 -tll 120 -o "result_hosts.txt"
:: 判断结果文件是否存在,如果不存在说明结果为 0
if not exist result_hosts.txt (
echo.
echo CloudflareST 测速结果 IP 数量为 0,跳过下面步骤...
goto :RESET
)
:: 获取第一行的最快 IP
for /f "tokens=1 delims=," %%i in (result_hosts.txt) do (
SET /a n+=1
If !n!==2 (
SET bestip=%%i
goto :END
)
)
:END
:: 判断刚刚获取的最快 IP 是否为空,以及是否和旧 IP 一样
if "%bestip%"=="" (
echo.
echo CloudflareST 测速结果 IP 数量为 0,跳过下面步骤...
goto :RESET
)
if "%bestip%"=="%nowip%" (
echo.
echo CloudflareST 测速结果 IP 数量为 0,跳过下面步骤...
goto :RESET
)
:: 下面这段代码是 "找不到满足条件的 IP 就一直循环测速下去" 才需要的代码
:: 考虑到当指定了下载速度下限,但一个满足全部条件的 IP 都没找到时,CloudflareST 就会输出所有 IP 结果
:: 因此当你指定 -sl 参数时,需要一处下面这段代码开头的 :: 注释符号,来做文件行数判断(比如下载测速数量:10 个,那么下面的值就设在为 11)
::for /f %%a in ('type result_hosts.txt') do set /a v+=1
::if %v% GTR 11 (
:: echo.
:: echo CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速...
:: goto :RESET
::)
echo %bestip%>nowip_hosts.txt
echo.
echo 旧 IP 为 %nowip%
echo 新 IP 为 %bestip%
CD /d "C:\Windows\System32\drivers\etc"
echo.
echo 开始备份 Hosts 文件(hosts_backup)...
copy hosts hosts_backup
echo.
echo 开始替换...
(
for /f "tokens=*" %%i in (hosts_backup) do (
set s=%%i
set s=!s:%nowip%=%bestip%!
echo !s!
)
)>hosts
echo 完成...
echo.
:STOP
pause -n 900 -sl 50 -tl 230 -tll 120 我就加了这4个参数,别的是脚本自带 |
我发现我写了错别字。。。 你要把这段代码前面的注释符
|
:: 下面这段代码是 "找不到满足条件的 IP 就一直循环测速下去" 才需要的代码 这里加::我去了 |
我这边无法复现你遇到的情况。
# 模拟有满足条件的 IP 时运行参数:
测速结果(有结果且行数少于 11):
# 模拟无满足条件的 IP 时(软件输出所有 IP 数据)运行参数:
测速结果(有结果但行数大于 11):
|
行,能循环就可以了,又不是我干活,电脑干 哈哈 辛苦大佬 |
我似乎发现问题了,好像是忘记重置读入的行数了,导致行数一直递增下去了。。。 |
加一行代码 set /a v=0
for /f %%a in ('type result_hosts.txt') do set /a v+=1
if %v% GTR 11 (
echo.
echo CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速...
goto :RESET
) 你测试下,没问题了我再去更新脚本。。。 |
4000多个根本测不什么好ip,-allip又太多了测不完
The text was updated successfully, but these errors were encountered: