10 Commits

Author SHA1 Message Date
xiu2
c045b914a4 修复 因修复上个 BUG 而产生的新 BUG(下载速度为 0.00)... 2023-02-12 16:35:30 +08:00
xiu2
d8db541c1f README.md 2023-02-11 18:28:43 +08:00
xiu2
65018cd415 README.md 2023-02-11 13:08:08 +08:00
charSLee013
f5ce273688 修复 某些情况下下载测速数值过大的问题 (#290)
* fix the speed measurement value is too large

* fix break when err == io.EOF
2023-02-11 12:40:06 +08:00
xiu2
ed1d512d65 README.md 2023-02-04 19:08:20 +08:00
xiu2
00d3e21e1b README.md 2023-02-02 16:27:45 +08:00
xiu2
2662b1affb README.md 2023-02-02 15:40:43 +08:00
xiu2
fa1940fe91 README.md 2023-02-02 15:38:09 +08:00
xiu2
0a9fb30671 README.md 2023-02-02 11:30:13 +08:00
xiu2
741f080c54 README.md 2023-02-01 13:32:24 +08:00
2 changed files with 57 additions and 39 deletions

View File

@@ -41,10 +41,10 @@ mkdir CloudflareST
cd CloudflareST cd CloudflareST
# 下载 CloudflareST 压缩包(自行根据需求替换 URL 中 [版本号] 和 [文件名] # 下载 CloudflareST 压缩包(自行根据需求替换 URL 中 [版本号] 和 [文件名]
wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.1.0/CloudflareST_linux_amd64.tar.gz wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.2.1/CloudflareST_linux_amd64.tar.gz
# 如果你是在国内服务器上下载,那么请使用下面这几个镜像加速: # 如果你是在国内服务器上下载,那么请使用下面这几个镜像加速:
# wget -N https://download.fastgit.org/XIU2/CloudflareSpeedTest/releases/download/v2.1.0/CloudflareST_linux_amd64.tar.gz # wget -N https://download.fastgit.org/XIU2/CloudflareSpeedTest/releases/download/v2.2.1/CloudflareST_linux_amd64.tar.gz
# wget -N https://ghproxy.com/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.1.0/CloudflareST_linux_amd64.tar.gz # wget -N https://ghproxy.com/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.2.1/CloudflareST_linux_amd64.tar.gz
# 如果下载失败的话,尝试删除 -N 参数(如果是为了更新,则记得提前删除旧压缩包 rm CloudflareST_linux_amd64.tar.gz # 如果下载失败的话,尝试删除 -N 参数(如果是为了更新,则记得提前删除旧压缩包 rm CloudflareST_linux_amd64.tar.gz
# 解压(不需要删除旧文件,会直接覆盖,自行根据需求替换 文件名) # 解压(不需要删除旧文件,会直接覆盖,自行根据需求替换 文件名)
@@ -71,7 +71,7 @@ chmod +x CloudflareST
### 结果示例 ### 结果示例
测速完毕后,默认会显示**最快的 10 个 IP**,示例(我联通白天测速结果) 测速完毕后,默认会显示**最快的 10 个 IP**,示例:
``` bash ``` bash
IP 地址 已发送 已接收 丢包率 平均延迟 下载速度 (MB/s) IP 地址 已发送 已接收 丢包率 平均延迟 下载速度 (MB/s)
@@ -92,9 +92,15 @@ IP 地址 已发送 已接收 丢包率 平均延迟 下载速度
# 因为每次测速都是在每个 IP 段中随机 IP所以每次的测速结果都不可能相同这是正常的 # 因为每次测速都是在每个 IP 段中随机 IP所以每次的测速结果都不可能相同这是正常的
# 注意!我发现电脑开机后第一次测速延迟会明显偏高,后续测速都正常,建议大家开机后第一次随便测几个 IP 后再正式开始测速。 # 注意!我发现电脑开机后第一次测速延迟会明显偏高(手动 TCPing 也一样),后续测速都正常
# 因此建议大家开机后第一次正式测速前,先随便测几个 IP无需等待延迟测速完成只要进度条动了就可以直接关了
# 软件是先 延迟测速并按从低到高排序后,再从 最低延迟的 IP 开始下载测速的,所以 # 软件在 默认参数 下的整个流程大概步骤
# 1. 延迟测速(默认 TCPing 模式HTTPing 模式需要手动加上参数)
# 2. 延迟排序(延迟从低到高排序,不同丢包率的会分开独立排序,因此可能会有一些延迟低但丢包的 IP 被排到后面)
# 3. 下载测速(从延迟最低的 IP 开始依次下载测速,默认测够 10 个就会停止)
# 4. 速度排序(速度从高到低排序)
# 5. 输出结果(可依靠参数控制是否输出到命令行(-p 0)/文件(-o "")
``` ```
测速结果第一行就是**既下载速度最快、又平均延迟最低的最快 IP**!至于拿来干嘛?取决于你~ 测速结果第一行就是**既下载速度最快、又平均延迟最低的最快 IP**!至于拿来干嘛?取决于你~
@@ -264,6 +270,9 @@ CloudflareST.exe -ip 1.1.1.1,2606:4700::/32
目前有两种延迟测速模式,分别为 **TCP 协议、HTTP 协议**。 目前有两种延迟测速模式,分别为 **TCP 协议、HTTP 协议**。
TCP 协议耗时更短、消耗资源更少,超时时间为 1 秒,该协议为默认模式。 TCP 协议耗时更短、消耗资源更少,超时时间为 1 秒,该协议为默认模式。
HTTP 协议适用于快速测试某域名指向某 IP 时是否可以访问,超时时间为 2 秒。 HTTP 协议适用于快速测试某域名指向某 IP 时是否可以访问,超时时间为 2 秒。
同一个 IP各协议去 Ping 得到的延迟一般为:**ICMP < TCP < HTTP**,越靠右对丢包等网络波动越敏感。
> 注意HTTPing 本质上也算一种**网络扫描**行为,因此如果你在服务器上面运行,需要**降低并发**(`-n`),否则可能会被一些严格的商家暂停服务。
``` bash ``` bash
# 只需加上 -httping 参数即可切换到 HTTP 协议延迟测速模式 # 只需加上 -httping 参数即可切换到 HTTP 协议延迟测速模式
@@ -276,6 +285,7 @@ CloudflareST.exe -httping -httping-code 200
CloudflareST.exe -httping -url https://cf.xiu2.xyz/url CloudflareST.exe -httping -url https://cf.xiu2.xyz/url
# 注意:如果测速地址为 HTTP 协议,记得加上 -tp 80这个参数会影响 延迟测速/下载测速 时使用的端口) # 注意:如果测速地址为 HTTP 协议,记得加上 -tp 80这个参数会影响 延迟测速/下载测速 时使用的端口)
# 同理,如果要测速 80 端口,那么也需要加上 -url 参数来指定一个 http:// 协议的地址才行(默认测速地址是 HTTPS 的)
CloudflareST.exe -httping -tp 80 -url http://xxx/xxx CloudflareST.exe -httping -tp 80 -url http://xxx/xxx
``` ```
@@ -291,12 +301,16 @@ CloudflareST.exe -httping -tp 80 -url http://xxx/xxx
**** ****
``` bash ``` bash
# 指定地区名后,延迟测速后得到的结果就都是指定地区的 IP 了 # 指定地区名后,延迟测速后得到的结果就都是指定地区的 IP 了(也可以继续进行下载测速)
# 节点地区名为当地机场三字码,指定多个时用英文逗号分隔 # 节点地区名为当地 机场三字码,指定多个时用英文逗号分隔
# 注意,该参数只有在 HTTPing 延迟测速模式下才可用(因为要访问网页来获得)
CloudflareST.exe -cfcolo HKG,KHH,NRT,LAX,SEA,SJC,FRA,MAD CloudflareST.exe -cfcolo HKG,KHH,NRT,LAX,SEA,SJC,FRA,MAD
# 注意,该参数只有在 HTTPing 延迟测速模式下才可用(因为要访问网页来获得)
``` ```
> Cloudflare 所有节点地区名机场三字码请看https://www.cloudflarestatus.com/
</details> </details>
**** ****
@@ -390,7 +404,7 @@ CloudflareST.exe -tll 40
CloudflareST.exe -tl 200 -dn 10 CloudflareST.exe -tl 200 -dn 10
``` ```
> 如果没有一个 IP **平均延迟低于 200ms**,那么不会输出任何内容。 > 如果**没有找到一个满足延迟**条件的 IP,那么不会输出任何内容。
**** ****
@@ -412,6 +426,8 @@ CloudflareST.exe -tl 200 -dd
CloudflareST.exe -sl 5 -dn 10 CloudflareST.exe -sl 5 -dn 10
``` ```
> 如果**没有找到一个满足速度**条件的 IP那么会**忽略条件输出所有 IP 测速结果**(方便你下次测速时调整条件)。
> 没有指定平均延迟上限时,如果一直**凑不够**满足条件的 IP 数量,就会**一直测速**下去。 > 没有指定平均延迟上限时,如果一直**凑不够**满足条件的 IP 数量,就会**一直测速**下去。
> 所以建议**同时指定 [下载速度下限] + [平均延迟上限]**,这样测速到指定延迟上限还没凑够数量,就会终止测速。 > 所以建议**同时指定 [下载速度下限] + [平均延迟上限]**,这样测速到指定延迟上限还没凑够数量,就会终止测速。
@@ -426,8 +442,8 @@ CloudflareST.exe -sl 5 -dn 10
CloudflareST.exe -tl 200 -sl 5.6 -dn 10 CloudflareST.exe -tl 200 -sl 5.6 -dn 10
``` ```
> 如果没有一个 IP **平均延迟低于 200ms**,那么不会输出任何内容。 > 如果**没有找到一个满足延迟**条件的 IP,那么不会输出任何内容。
> 如果没有一个 IP **下载速度高于 5.6 MB/s**,那么就会**和不指定 [下载速度下限] 条件一样**输出结果。 > 如果**没有找到一个满足速度**条件的 IP那么会忽略条件输出所有 IP 测速结果(方便你下次测速时调整条件)。
> 所以建议先不指定条件测速一遍,看看平均延迟和下载速度大概在什么范围,避免指定条件**过低/过高** > 所以建议先不指定条件测速一遍,看看平均延迟和下载速度大概在什么范围,避免指定条件**过低/过高**
> 因为Cloudflare 公开的 IP 段是**回源 IP+任播 IP**,而**回源 IP**是无法使用的,所以下载测速是 0.00。 > 因为Cloudflare 公开的 IP 段是**回源 IP+任播 IP**,而**回源 IP**是无法使用的,所以下载测速是 0.00。
@@ -464,6 +480,7 @@ CloudflareST.exe -ip 1.1.1.1,2.2.2.2/24,2606:4700::/32
1.1.1.1 1.1.1.1
1.1.1.200 1.1.1.200
1.0.0.1/24 1.0.0.1/24
2606:4700::/32
``` ```
> 单个 IP 的话可以省略 `/32` 子网掩码了(即 `1.1.1.1`等同于 `1.1.1.1/32`)。 > 单个 IP 的话可以省略 `/32` 子网掩码了(即 `1.1.1.1`等同于 `1.1.1.1/32`)。
@@ -491,9 +508,7 @@ CloudflareST.exe -f 1.txt
我以前说过,开发该软件项目的目的就是为了通过**改 Hosts 的方式来加速访问使用 Cloudflare CDN 的网站**。 我以前说过,开发该软件项目的目的就是为了通过**改 Hosts 的方式来加速访问使用 Cloudflare CDN 的网站**。
但就如 [**#8**](https://github.com/XIU2/CloudflareSpeedTest/issues/8) 所说,一个个添加域名到 Hosts 实在**太麻烦**了,于是我就找到了个**一劳永逸**的办法! 但就如 [**#8**](https://github.com/XIU2/CloudflareSpeedTest/issues/8) 所说,一个个添加域名到 Hosts 实在**太麻烦**了,于是我就找到了个**一劳永逸**的办法!可以看这个 [**还在一个个添加 Hosts完美本地加速所有使用 Cloudflare CDN 的网站方法来了!**](https://github.com/XIU2/CloudflareSpeedTest/discussions/71) 和另一个[依靠本地 DNS 服务来修改域名解析 IP 为自选 IP](https://github.com/XIU2/CloudflareSpeedTest/issues/115) 的教程。
可以看这个 [**还在一个个添加 Hosts完美本地加速所有使用 Cloudflare CDN 的网站方法来了!**](https://github.com/XIU2/CloudflareSpeedTest/discussions/71) 和另一个[依靠本地 DNS 服务来修改域名解析 IP 为自选 IP](https://github.com/XIU2/CloudflareSpeedTest/issues/115) 的教程。
**** ****

View File

@@ -167,10 +167,13 @@ func downloadHandler(ip *net.IPAddr) float64 {
} }
bufferRead, err := response.Body.Read(buffer) bufferRead, err := response.Body.Read(buffer)
if err != nil { if err != nil {
if err != io.EOF { // 文件下载完了,或因网络等问题导致链接中断,则退出循环(终止测速) if err != io.EOF { // 如果文件下载过程中遇到报错(如 Timeout且并不是因为文件下载完了,则退出循环(终止测速)
break break
} }
e.Add(float64(contentRead-lastContentRead) / (float64(nextTime.Sub(currentTime)) / float64(timeSlice))) // 获取上个时间片
last_time_slice := timeStart.Add(timeSlice * time.Duration(timeCounter-1))
// 下载数据量 / (用当前时间 - 上个时间片/ 时间片)
e.Add(float64(contentRead-lastContentRead) / (float64(currentTime.Sub(last_time_slice)) / float64(timeSlice)))
} }
contentRead += int64(bufferRead) contentRead += int64(bufferRead)
} }