7 Commits

Author SHA1 Message Date
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 50 additions and 36 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.0/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.0/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.0/CloudflareST_linux_amd64.tar.gz
# 如果下载失败的话,尝试删除 -N 参数(如果是为了更新,则记得提前删除旧压缩包 rm CloudflareST_linux_amd64.tar.gz # 如果下载失败的话,尝试删除 -N 参数(如果是为了更新,则记得提前删除旧压缩包 rm CloudflareST_linux_amd64.tar.gz
# 解压(不需要删除旧文件,会直接覆盖,自行根据需求替换 文件名) # 解压(不需要删除旧文件,会直接覆盖,自行根据需求替换 文件名)
@@ -264,6 +264,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 +279,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 +295,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 +398,7 @@ CloudflareST.exe -tll 40
CloudflareST.exe -tl 200 -dn 10 CloudflareST.exe -tl 200 -dn 10
``` ```
> 如果没有一个 IP **平均延迟低于 200ms**,那么不会输出任何内容。 > 如果**没有找到一个满足延迟**条件的 IP,那么不会输出任何内容。
**** ****
@@ -412,6 +420,8 @@ CloudflareST.exe -tl 200 -dd
CloudflareST.exe -sl 5 -dn 10 CloudflareST.exe -sl 5 -dn 10
``` ```
> 如果**没有找到一个满足速度**条件的 IP那么会**忽略条件输出所有 IP 测速结果**(方便你下次测速时调整条件)。
> 没有指定平均延迟上限时,如果一直**凑不够**满足条件的 IP 数量,就会**一直测速**下去。 > 没有指定平均延迟上限时,如果一直**凑不够**满足条件的 IP 数量,就会**一直测速**下去。
> 所以建议**同时指定 [下载速度下限] + [平均延迟上限]**,这样测速到指定延迟上限还没凑够数量,就会终止测速。 > 所以建议**同时指定 [下载速度下限] + [平均延迟上限]**,这样测速到指定延迟上限还没凑够数量,就会终止测速。
@@ -426,8 +436,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 +474,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 +502,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,15 @@ 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 { // 文件下载完了,或因网络等问题导致链接中断,则退出循环(终止测速) // 获取上个时间片
last_time_slice := timeStart.Add(timeSlice * time.Duration(timeCounter-1))
// 下载数据量 / (用当前时间 - 上个时间片/ 时间片)
e.Add(float64(contentRead-lastContentRead) / (float64(currentTime.Sub(last_time_slice)) / float64(timeSlice)))
if err == io.EOF { // 文件下载完了,或因网络等问题导致链接中断,则退出循环(终止测速)
break break
} }
e.Add(float64(contentRead-lastContentRead) / (float64(nextTime.Sub(currentTime)) / float64(timeSlice)))
} }
contentRead += int64(bufferRead) contentRead += int64(bufferRead)
} }