mirror of
https://github.com/XIU2/CloudflareSpeedTest.git
synced 2026-03-10 08:35:57 +08:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c045b914a4 | ||
|
|
d8db541c1f | ||
|
|
65018cd415 | ||
|
|
f5ce273688 | ||
|
|
ed1d512d65 | ||
|
|
00d3e21e1b | ||
|
|
2662b1affb | ||
|
|
fa1940fe91 | ||
|
|
0a9fb30671 | ||
|
|
741f080c54 |
45
README.md
45
README.md
@@ -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) 的教程。
|
|
||||||
|
|
||||||
****
|
****
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user