Skip to content
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

Closed
underlaw opened this issue Dec 15, 2021 · 22 comments
Closed

随机数量能否加大一点了 #144

underlaw opened this issue Dec 15, 2021 · 22 comments

Comments

@underlaw
Copy link

4000多个根本测不什么好ip,-allip又太多了测不完

image

@XIU2
Copy link
Owner

XIU2 commented Dec 15, 2021

如果测试好几次都没有见到一个速度快的 IP,那要么是你的运气太差了,要么就是你与 Cloudflare 之间的网络链接质量太差了。
如果是后者,那么我的建议是放弃 Cloudflare。。。


# 小提示:

目前处于晚高峰期(已经临近 23:00~01:00 顶峰了),此时国外服务器(包括 Cloudflare) 与 中国内地之间的网络链接质量是全天最差的时候(就像上下班时的大堵车),因此找不到速度快的 IP 是很正常的。
但如果白天低峰期时还是一个速度快的 IP 都没有,那么直接放弃 Cloudflare 才是最明智的选择。

@XIU2
Copy link
Owner

XIU2 commented Dec 15, 2021

如果只是要实现你的需求,其实可以用其他方案曲线解决(附带的 cfst_hosts 脚本改改就行),也不需要修改软件代码。
用参数设定好延迟/速度条件后运行,如果 1 个满足条件的 IP 都没找到,那就一直循环运行下去。

具体你可以参考这个 Issues #143

@underlaw
Copy link
Author

好的谢谢

@underlaw
Copy link
Author

underlaw commented Dec 16, 2021

如果只是要实现你的需求,其实可以用其他方案曲线解决(附带的 cfst_hosts 脚本改改就行),也不需要修改软件代码。 用参数设定好延迟/速度条件后运行,如果 1 个满足条件的 IP 都没找到,那就一直循环运行下去。

具体你可以参考这个 Issues #143

大佬,能否麻烦你写一个完整的了,自己改老测不到自己想要速度的比如50M,他不循环测 通了哈哈

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

你这句话能读通顺么?

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

看了下还有点小问题,我又在那个 Issues 下补充了一段:

补充一下,如果 脚本/CloudflareST 所在目录下已经存在 result.csv 文件那么为了避免共用该文件而出现问题,也需要改一下脚本中的 result.csv 文件名。


先在 CloudflareST 运行命令后面加上指定文件名的参数(文件名随意):

:: 这里可以自己添加、修改 CloudflareST 的运行参数,echo.| 的作用是自动回车退出程序(不再需要加上 -p 0 参数了)
echo.|CloudflareST.exe -o "result123.txt"

然后把下面一点的 result.csv 改成上面指定的文件名:

for /f "tokens=1 delims=," %%i in (result123.txt) do (
    SET /a n+=1 
    If !n!==2 (
        SET bestip=%%i
        goto :END
    )
)

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

算了,我干脆把这几个脚本文件都改了改,所有文件名都独立分开,同时把那个 :RESET 代码都加进去了(不过默认是注释的)。
你重新下载压缩包把最新的脚本文件提取出来,你只需要把里面的 3 个 goto :STOP 改为 goto :RESET 就行了。

@underlaw
Copy link
Author

算了,我干脆把这几个脚本文件都改了改,所有文件名都独立分开,同时把那个 :RESET 代码都加进去了(不过默认是注释的)。 你重新下载压缩包把最新的脚本文件提取出来,你只需要把里面的 3 个 goto :STOP 改为 goto :RESET 就行了。

大佬威武

@underlaw
Copy link
Author

image
大佬这个

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

这是正常的,当指定了下载速度下限,但一个满足全部条件的 IP 都没找到时,就会输出所有 IP 结果(这样用户才能看到测速最高值范围,以提醒用户条件设置的太高了)。

前面改脚本的时候,倒是把这个机制给忘了。。。

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

试了下,再加上一段代码判断一下结果文件的行数就行了(比如下载测速数量是 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%
...

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

我已经更新脚本了。

@underlaw
Copy link
Author

试了下,再加上一段代码判断一下结果文件的行数就行了(比如下载测速数量是 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%
...

好的我下载再试下

@underlaw
Copy link
Author

underlaw commented Dec 17, 2021

image
循环上了,可他判断不对 哈哈

就我这个例子, sl=50 按这第二个循环找到一个135的,应该算是达到条件了吧

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

我这边就指定了 1 个 IP 模拟测试,看起来正常:

开始测速...
# XIU2/CloudflareSpeedTest v2.0.2

开始延迟测速(模式:TCP IPv4,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms)
1 / 1 [-------------------------------------------------------------------------------------------------------] 100.00%
开始下载测速(下载速度下限:0.00 MB/s,下载测速数量:1,下载测速队列:1):
1 / 1 [-------------------------------------------------------------------------------------------------------] 100.00%
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
162.159.204.212   4       4       0.00    176.90    19.78

完整测速结果已写入 result_hosts.txt 文件,可使用记事本/表格软件查看。
按下 回车键 或 Ctrl+C 退出。
旧 IP 为 162.159.204.199
新 IP 为 162.159.204.212
完成...

请按任意键继续. . .

@underlaw
Copy link
Author

underlaw commented Dec 17, 2021

:: --------------------------------------------------------------
::	项目: 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个参数,别的是脚本自带

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

我发现我写了错别字。。。

你要把这段代码前面的注释符 :: 移除(我写成一处了...):

::for /f %%a in ('type result_hosts.txt') do set /a v+=1
::if %v% GTR 11 (
:: echo.
:: echo CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速...
:: goto :RESET
::)

@underlaw
Copy link
Author

:: 下面这段代码是 "找不到满足条件的 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
::)

这里加::我去了

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

我这边无法复现你遇到的情况。
为了节省时间,我是这样模拟复现的:

文件 111.txt 里面就一个 IP 段 162.159.204.0/24


# 模拟有满足条件的 IP 时

运行参数:

echo.|CloudflareST.exe -o "result_hosts.txt" -f 111.txt

测速结果(有结果且行数少于 11):

# XIU2/CloudflareSpeedTest v2.0.2

开始延迟测速(模式:TCP IPv4,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms)
1 / 1 [-------------------------------------------------------------------------------------------------------] 100.00%
开始下载测速(下载速度下限:0.00 MB/s,下载测速数量:1,下载测速队列:1):
1 / 1 [-------------------------------------------------------------------------------------------------------] 100.00%
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
162.159.204.212   4       4       0.00    176.90    19.78

完整测速结果已写入 result_hosts.txt 文件,可使用记事本/表格软件查看。
按下 回车键 或 Ctrl+C 退出。
旧 IP 为 162.159.204.199
新 IP 为 162.159.204.212
完成...

# 模拟无满足条件的 IP 时(软件输出所有 IP 数据)

运行参数:

echo.|CloudflareST.exe -o "result_hosts.txt" -f 111.txt -allip -dd

测速结果(有结果但行数大于 11):

# XIU2/CloudflareSpeedTest v2.0.2

开始延迟测速(模式:TCP IPv4,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms)
256 / 256 [---------------------------------------------------------------------------------------------------] 100.00%
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
162.159.204.223   4       4       0.00    158.52    0.00
162.159.204.215   4       4       0.00    158.59    0.00
162.159.204.30    4       4       0.00    159.17    0.00
162.159.204.231   4       4       0.00    159.27    0.00
162.159.204.13    4       4       0.00    159.37    0.00
162.159.204.242   4       4       0.00    159.77    0.00
162.159.204.116   4       4       0.00    159.87    0.00
162.159.204.2     4       4       0.00    159.87    0.00
162.159.204.210   4       4       0.00    160.15    0.00
162.159.204.54    4       4       0.00    160.15    0.00

完整测速结果已写入 result_hosts.txt 文件,可使用记事本/表格软件查看。
按下 回车键 或 Ctrl+C 退出。
CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速...
# XIU2/CloudflareSpeedTest v2.0.2

开始延迟测速(模式:TCP IPv4,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms)
256 / 256 [---------------------------------------------------------------------------------------------------] 100.00%
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
162.159.204.223   4       4       0.00    157.52    0.00
162.159.204.2     4       4       0.00    158.28    0.00
162.159.204.242   4       4       0.00    158.32    0.00
162.159.204.19    4       4       0.00    159.25    0.00
162.159.204.21    4       4       0.00    159.28    0.00
162.159.204.13    4       4       0.00    159.60    0.00
162.159.204.210   4       4       0.00    159.60    0.00
162.159.204.215   4       4       0.00    159.68    0.00
162.159.204.247   4       4       0.00    159.72    0.00
162.159.204.152   4       4       0.00    160.04    0.00

完整测速结果已写入 result_hosts.txt 文件,可使用记事本/表格软件查看。
按下 回车键 或 Ctrl+C 退出。
CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速...
# XIU2/CloudflareSpeedTest v2.0.2

开始延迟测速(模式:TCP IPv4,端口:443,平均延迟上限:9999 ms,平均延迟下限:0 ms)

@underlaw
Copy link
Author

行,能循环就可以了,又不是我干活,电脑干 哈哈 辛苦大佬

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

我似乎发现问题了,好像是忘记重置读入的行数了,导致行数一直递增下去了。。。

@XIU2
Copy link
Owner

XIU2 commented Dec 17, 2021

加一行代码 set /a v=0 就行了,加入后如下:

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
)

你测试下,没问题了我再去更新脚本。。。

@XIU2 XIU2 closed this as completed Dec 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants