Skip to content
Open

up #3

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
c6d49bc
README.md
XIU2 May 11, 2023
b6f3ddc
README.md
XIU2 May 15, 2023
eae7d2e
优化 当延迟上下限条件为默认值时不进行过滤
XIU2 May 31, 2023
7c36abc
新增 [丢包几率上限] 参数
XIU2 May 31, 2023
4222b6c
README.md
XIU2 May 31, 2023
5f9d28e
README.md
XIU2 May 31, 2023
6c698a8
README.md
XIU2 Jun 6, 2023
bef4476
README.md
XIU2 Jun 6, 2023
133924d
README.md
XIU2 Jun 8, 2023
2d40078
README.md
XIU2 Jul 3, 2023
4621c56
README.md
XIU2 Jul 5, 2023
ffc0daf
README.md
XIU2 Sep 24, 2023
49992a7
README.md
XIU2 Sep 24, 2023
a4b39ec
调整 测速过程中的输出内容
XIU2 Nov 25, 2023
2cfc1e6
README.md
XIU2 Nov 25, 2023
ca5564c
README.md
XIU2 Nov 26, 2023
aa52d60
README.md
XIU2 Nov 30, 2023
b3010e2
README.md
XIU2 Nov 30, 2023
7534e34
README.md
XIU2 Dec 15, 2023
216d0f5
README.md
XIU2 Dec 15, 2023
176271d
README.md
XIU2 Jan 20, 2024
9d9d71f
README.md
XIU2 Feb 12, 2024
6d12e7b
README.md
XIU2 Feb 12, 2024
d96281a
README.md
XIU2 Feb 13, 2024
dbb5864
Update README.md
XIU2 Jun 17, 2024
23b4f26
Update issue templates
XIU2 Jun 19, 2024
63234ae
Update issue templates
XIU2 Jul 9, 2024
f2e87d3
README.md
XIU2 Jul 9, 2024
bf832c5
更新 import "io/ioutil" -> "io"
XIU2 Jul 22, 2024
e815a60
README.md
XIU2 Jul 25, 2024
8a6670b
README.md
XIU2 Jul 27, 2024
a5cf1fd
新增 `cfst_dnspod.sh` 脚本用于 dnspod 自动更新域名解析最优 IP (#533)
imashen Aug 6, 2024
13f0c32
README.md
XIU2 Aug 6, 2024
1995d08
README.md
XIU2 Aug 6, 2024
84cbd29
README.md
XIU2 Aug 9, 2024
b3036eb
Update README.md
ipcjs Aug 22, 2024
0033f96
Update README.md
ipcjs Aug 22, 2024
570a710
Update README.md
ipcjs Aug 22, 2024
887a55c
README.md
XIU2 Sep 12, 2024
bbe762c
新增 支持 API 令牌方式
XIU2 Oct 6, 2024
66c0923
README.md
XIU2 Oct 9, 2024
c74168a
Update README.md
ipcjs Nov 14, 2024
209c710
README.md
XIU2 Dec 6, 2024
1d9d742
README.md
XIU2 Dec 6, 2024
a438fc6
README.md
XIU2 Dec 10, 2024
6c9d336
README.md
XIU2 Dec 17, 2024
dbceab3
README.md
XIU2 Dec 17, 2024
5e39f26
add scripts to auto update config file for dnsmasq
Sving1024 Dec 28, 2024
25fc292
reset version
Sving1024 Dec 28, 2024
b85ae8e
Merge pull request #565 from Sving1024/master
XIU2 Dec 28, 2024
ee31cff
README.md
XIU2 Dec 28, 2024
8acc095
README.md
XIU2 Jan 4, 2025
551f753
README.md
XIU2 Jan 8, 2025
b15fe2c
fix IPv6
Sving1024 Jan 22, 2025
d6818fa
Merge pull request #570 from Sving1024/master
XIU2 Jan 22, 2025
c7f8170
README.md
XIU2 Jan 22, 2025
013c27c
README.md
XIU2 Mar 25, 2025
04da9f5
Merge pull request #538 from ipcjs/patch-1
XIU2 May 11, 2025
66912dd
新增 支持显示地区码(机场三字码,仅限 Cloudflare、AWS CloudFront,HTTPing 和 下载测速(无论是哪个测速模…
XIU2 Jun 28, 2025
e969919
考虑 对其他 CDN 的地区码支持(先加上相关注释方便后续完善)
XIU2 Jul 3, 2025
fc5cd11
README.md
XIU2 Jul 3, 2025
e236a24
完善 调试模式
XIU2 Jul 8, 2025
6c599ed
新增 调试模式支持在 HTTPing 测速过程中输出更多日志
XIU2 Jul 8, 2025
c146277
新增 地区码支持 Fastly、Gcore、CDN77、Bunny 等 CDN
XIU2 Jul 8, 2025
2fe4e41
调整 CloudflareST 为简写的 cfst
XIU2 Jul 8, 2025
1bacd92
调整 帮助文本开头的一句话描述内容
XIU2 Jul 8, 2025
db40924
README.md
XIU2 Jul 9, 2025
397cfd2
修复 调试模式下因重定向后的地址出错导致下载测速失败时输出的最终地址不准确的问题
XIU2 Jul 9, 2025
6099b48
README.md
XIU2 Jul 9, 2025
b5e741e
README.md
XIU2 Jul 9, 2025
bf1bd56
README.md
XIU2 Jul 9, 2025
74267eb
README.md
XIU2 Jul 9, 2025
3cf8987
README.md
XIU2 Jul 14, 2025
2bb2f50
README.md
XIU2 Jul 21, 2025
a392fdd
修复 没有设置下载速度下限条件时输出测速结果数量异常的问题
XIU2 Jul 21, 2025
d66b2aa
README.md
XIU2 Jul 21, 2025
574e419
补充 调试模式下,更多下载测速失败报错原因
XIU2 Jul 21, 2025
3cd9a35
完善 注释说明
XIU2 Jul 21, 2025
d76a8bc
更新 依赖版本及最低编译版本
XIU2 Jul 22, 2025
4f9ca03
修复 部分情况下无法显示彩色文字的问题
XIU2 Jul 22, 2025
346b27f
README.md
XIU2 Jul 22, 2025
e03a371
README.me
XIU2 Jul 25, 2025
801dd53
README.md
XIU2 Sep 13, 2025
e57e9d3
README.md
XIU2 Oct 22, 2025
b955387
README.md
XIU2 Nov 23, 2025
6eaacd6
修复 CFST新版本下获取不到第一行 IP 的问题
XIU2 Dec 15, 2025
7fbe1d1
README.md
XIU2 Feb 26, 2026
f735c0f
修复可能错误的链接
jysz Mar 2, 2026
bcbf7f0
Merge pull request #632 from jysz/patch-1
XIU2 Mar 2, 2026
2de42f8
README.md
XIU2 Mar 2, 2026
e4a12e2
更新 衍生项目
XIU2 Mar 27, 2026
1e4400b
Update README.md
XIU2 Mar 27, 2026
62e8625
Update README.md
XIU2 Apr 4, 2026
760829d
Update README.md
XIU2 Apr 4, 2026
493dbd7
Update README.md
XIU2 Apr 26, 2026
4eef69a
fix: close http connections when each ip test ended
WankkoRee Apr 26, 2026
b9b192a
Update README.md
XIU2 Apr 29, 2026
1af7602
fix: close connections when each download test ended
WankkoRee Apr 29, 2026
65b43aa
Merge pull request #645 from WankkoRee/pr-close-http-conn
XIU2 Apr 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/ISSUE_TEMPLATE/01-bugReport.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ body:
value: |
发之前,请先搜下有没有类似的 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues)、[**Discussions**](https://github.com/XIU2/CloudflareSpeedTest/discussions) 问题(包括[**已关闭**](https://github.com/XIU2/CloudflareSpeedTest/issues?q=is%3Aissue+is%3Aclosed)的),请勿重复发起!

注意!如果你反馈的问题和 CloudflareST **软件本身功能无关**(如关于 Cloudflare CDN 的网络问题),请**前往讨论区** (💬 [**Discussions**](https://github.com/XIU2/CloudflareSpeedTest/discussions)) 发帖交流!(不合适的 Issues 会被转过去
> [!NOTE]
> 注意!如果你反馈的问题和 CFST **软件本身功能无关**(如关于 Cloudflare CDN 的网络问题),请**前往讨论区** (💬 [**Discussions**](https://github.com/XIU2/CloudflareSpeedTest/discussions)) 发帖交流!(不合适的 Issues 会被转过去
****
- type: textarea
id: description
Expand Down
6 changes: 4 additions & 2 deletions .github/ISSUE_TEMPLATE/02-featureRequest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ body:
value: |
发之前,请先搜下有没有类似的 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues)、[**Discussions**](https://github.com/XIU2/CloudflareSpeedTest/discussions) 问题(包括[**已关闭**](https://github.com/XIU2/CloudflareSpeedTest/issues?q=is%3Aissue+is%3Aclosed)的),请勿重复发起!

注意!如果你提的功能建议和 CloudflareST **软件本身功能无关**,请**前往讨论区** (💬 [**Discussions**](https://github.com/XIU2/CloudflareSpeedTest/discussions)) 发帖交流!
> [!NOTE]
> 注意!如果你提的功能建议和 CFST **软件本身功能无关**,请**前往讨论区** (💬 [**Discussions**](https://github.com/XIU2/CloudflareSpeedTest/discussions)) 发帖交流!

> 另外,不接受**个性化**的功能请求(即 **很少人** 或 **只有你自己** 才会用到的功能)
> [!TIP]
> 另外,不接受**个性化**的小众功能请求(即 **很少人** 或 **只有你自己** 才会用到的功能)
****
- type: textarea
id: description
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ blank_issues_enabled: false
contact_links:
- name: 前往讨论区 (💬 Discussions)
url: https://github.com/XIU2/CloudflareSpeedTest/discussions
about: Issues 仅用于反馈问题、功能建议,其他话题请到 💬 Discussions 发帖讨论(不合适的 Issues 会被转过去
about: Issues 仅用于对 CFST 本身的反馈问题、功能建议,其他话题请到 💬 Discussions 发帖讨论(不合适的 Issues 会被转过去
563 changes: 422 additions & 141 deletions README.md

Large diffs are not rendered by default.

15 changes: 12 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
module github.com/XIU2/CloudflareSpeedTest

go 1.14
go 1.18

require (
github.com/VividCortex/ewma v1.1.1
github.com/cheggaaa/pb/v3 v3.0.4
github.com/VividCortex/ewma v1.2.0
github.com/cheggaaa/pb/v3 v3.1.7
github.com/fatih/color v1.18.0
)

require (
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
golang.org/x/sys v0.30.0 // indirect
)
35 changes: 18 additions & 17 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM=
github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
github.com/cheggaaa/pb/v3 v3.0.4 h1:QZEPYOj2ix6d5oEg63fbHmpolrnNiwjUsk+h74Yt4bM=
github.com/cheggaaa/pb/v3 v3.0.4/go.mod h1:7rgWxLrAUcFMkvJuv09+DYi7mMUYi8nO9iOWcvGJPfw=
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10=
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9 h1:ZBzSG/7F4eNKz2L3GE9o300RX0Az1Bw5HF7PDraD+qU=
golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow=
github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4=
github.com/cheggaaa/pb/v3 v3.1.7 h1:2FsIW307kt7A/rz/ZI2lvPO+v3wKazzE4K/0LtTWsOI=
github.com/cheggaaa/pb/v3 v3.1.7/go.mod h1:/Ji89zfVPeC/u5j8ukD0MBPHt2bzTYp74lQ7KlgFWTQ=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
43 changes: 25 additions & 18 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package main
import (
"flag"
"fmt"
"io/ioutil"
"io"
"net/http"
"os"
"runtime"
Expand All @@ -21,14 +21,14 @@ func init() {
var printVersion bool
var help = `
CloudflareSpeedTest ` + version + `
测试 Cloudflare CDN 所有 IP 的延迟和速度,获取最快 IP (IPv4+IPv6)!
测试各个 CDN 或网站所有 IP 的延迟和速度,获取最快 IP (IPv4+IPv6)!
https://github.com/XIU2/CloudflareSpeedTest

参数:
-n 200
延迟测速线程;越多延迟测速越快,性能弱的设备 (如路由器) 请勿太高;(默认 200 最多 1000)
-t 4
延迟测速次数;单个 IP 延迟测速次数,为 1 时将过滤丢包的IP;(默认 4 次)
延迟测速次数;单个 IP 延迟测速的次数;(默认 4 次)
-dn 10
下载测速数量;延迟测速并排序后,从最低延迟起下载测速的数量;(默认 10 个)
-dt 10
Expand All @@ -43,12 +43,14 @@ https://github.com/XIU2/CloudflareSpeedTest
-httping-code 200
有效状态代码;HTTPing 延迟测速时网页返回的有效 HTTP 状态码,仅限一个;(默认 200 301 302)
-cfcolo HKG,KHH,NRT,LAX,SEA,SJC,FRA,MAD
匹配指定地区;地区名为当地机场三字码,英文逗号分隔,仅 HTTPing 模式可用;(默认 所有地区)
匹配指定地区;IATA 机场地区码或国家/城市码,英文逗号分隔,仅 HTTPing 模式可用;(默认 所有地区)

-tl 200
平均延迟上限;只输出低于指定平均延迟的 IP,可与其他上限/下限搭配;(默认 9999 ms)
平均延迟上限;只输出低于指定平均延迟的 IP,各上下限条件可搭配使用;(默认 9999 ms)
-tll 40
平均延迟下限;只输出高于指定平均延迟的 IP,可与其他上限/下限搭配;(默认 0 ms)
平均延迟下限;只输出高于指定平均延迟的 IP;(默认 0 ms)
-tlr 0.2
丢包几率上限;只输出低于/等于指定丢包率的 IP,范围 0.00~1.00,0 过滤掉任何丢包的 IP;(默认 1.00)
-sl 5
下载速度下限;只输出高于指定下载速度的 IP,凑够指定数量 [-dn] 才会停止测速;(默认 0.00 MB/s)

Expand All @@ -66,12 +68,16 @@ https://github.com/XIU2/CloudflareSpeedTest
-allip
测速全部的IP;对 IP 段中的每个 IP (仅支持 IPv4) 进行测速;(默认 每个 /24 段随机测速一个 IP)

-debug
调试输出模式;会在一些非预期情况下输出更多日志以便判断原因;(默认 关闭)

-v
打印程序版本 + 检查版本更新
-h
打印帮助说明
`
var minDelay, maxDelay, downloadTime int
var maxLossRate float64
flag.IntVar(&task.Routines, "n", 200, "延迟测速线程")
flag.IntVar(&task.PingTimes, "t", 4, "延迟测速次数")
flag.IntVar(&task.TestCount, "dn", 10, "下载测速数量")
Expand All @@ -85,6 +91,7 @@ https://github.com/XIU2/CloudflareSpeedTest

flag.IntVar(&maxDelay, "tl", 9999, "平均延迟上限")
flag.IntVar(&minDelay, "tll", 0, "平均延迟下限")
flag.Float64Var(&maxLossRate, "tlr", 1, "丢包几率上限")
flag.Float64Var(&task.MinSpeed, "sl", 0, "下载速度下限")

flag.IntVar(&utils.PrintNum, "p", 10, "显示结果数量")
Expand All @@ -95,15 +102,18 @@ https://github.com/XIU2/CloudflareSpeedTest
flag.BoolVar(&task.Disable, "dd", false, "禁用下载测速")
flag.BoolVar(&task.TestAll, "allip", false, "测速全部 IP")

flag.BoolVar(&utils.Debug, "debug", false, "调试输出模式")

flag.BoolVar(&printVersion, "v", false, "打印程序版本")
flag.Usage = func() { fmt.Print(help) }
flag.Parse()

if task.MinSpeed > 0 && time.Duration(maxDelay)*time.Millisecond == utils.InputMaxDelay {
fmt.Println("[小提示] 在使用 [-sl] 参数时,建议搭配 [-tl] 参数,以避免因凑不够 [-dn] 数量而一直测速...")
utils.Yellow.Println("[提示] 在使用 [-sl] 参数时,建议搭配 [-tl] 参数,以避免因凑不够 [-dn] 数量而一直测速...")
}
utils.InputMaxDelay = time.Duration(maxDelay) * time.Millisecond
utils.InputMinDelay = time.Duration(minDelay) * time.Millisecond
utils.InputMaxLossRate = float32(maxLossRate)
task.Timeout = time.Duration(downloadTime) * time.Second
task.HttpingCFColomap = task.MapColoMap()

Expand All @@ -112,9 +122,9 @@ https://github.com/XIU2/CloudflareSpeedTest
fmt.Println("检查版本更新中...")
checkUpdate()
if versionNew != "" {
fmt.Printf("*** 发现新版本 [%s]!请前往 [https://github.com/XIU2/CloudflareSpeedTest] 更新! ***", versionNew)
utils.Yellow.Printf("*** 发现新版本 [%s]!请前往 [https://github.com/XIU2/CloudflareSpeedTest] 更新! ***", versionNew)
} else {
fmt.Println("当前为最新版本 [" + version + "]!")
utils.Green.Println("当前为最新版本 [" + version + "]!")
}
os.Exit(0)
}
Expand All @@ -125,21 +135,18 @@ func main() {

fmt.Printf("# XIU2/CloudflareSpeedTest %s \n\n", version)

// 开始延迟测速
pingData := task.NewPing().Run().FilterDelay()
// 开始延迟测速 + 过滤延迟/丢包
pingData := task.NewPing().Run().FilterDelay().FilterLossRate()
// 开始下载测速
speedData := task.TestDownloadSpeed(pingData)
utils.ExportCsv(speedData) // 输出文件
speedData.Print() // 打印结果

if versionNew != "" {
fmt.Printf("\n*** 发现新版本 [%s]!请前往 [https://github.com/XIU2/CloudflareSpeedTest] 更新! ***\n", versionNew)
}
endPrint()
endPrint() // 根据情况选择退出方式(针对 Windows)
}

// 根据情况选择退出方式(针对 Windows)
func endPrint() {
if utils.NoPrintResult() {
if utils.NoPrintResult() { // 如果不需要打印测速结果,则直接退出
return
}
if runtime.GOOS == "windows" { // 如果是 Windows 系统,则需要按下 回车键 或 Ctrl+C 退出(避免通过双击运行时,测速完毕后直接关闭)
Expand All @@ -157,7 +164,7 @@ func checkUpdate() {
return
}
// 读取资源数据 body: []byte
body, err := ioutil.ReadAll(res.Body)
body, err := io.ReadAll(res.Body)
if err != nil {
return
}
Expand Down
99 changes: 84 additions & 15 deletions script/README.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,38 @@
# XIU2/CloudflareSpeedTest - Script
# XIU2/CloudflareSpeedTest - Script(脚本)

这里都是一些基于 **XIU2/CloudflareSpeedTest** 并**扩展更多功能**的脚本。
有什么现有脚本功能上的建议可以告诉我,如果你有一些自用好用的脚本也可以通过 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues) 或 Pull requests 发给我添加到这里让更多人用到(会标注作者的~
这里都是一些通过调用 **CFST** 并**扩展实现更多个性化功能**的脚本。

> 小提示:点击↖左上角的三横杠图标按钮即可查看目录~
****
> [!TIP]
> 我之所以将 CFST 制作为一个**命令行程序**,就是考虑到**通用性**,因为毕竟不可能把所有需求都塞到软件内(特别是一些**个性化、小众**的需求),这样增加维护难度和精力不说,还会导致软件异常臃肿(`“变成我讨厌的样子”`),而命令行程序的优势之一就在于**可以很方便的和其他软件、脚本搭配使用**。

比如像下面这些我写的几个脚本,就是把一些需求以外置脚本方式实现。

> 即脚本调用 CFST 测速并获取结果,然后***按照自己的需求自由决定***如何处理得到的测速结果(比如修改 Hosts 等)。

总的来说,我写的这几个脚本都比较简单,功能也很单一,除了满足部分用户的需求外,***更像是一个 CFST 与脚本搭配使用的示例参考***,对于一些会写脚本、软件的用户来说,完全可以**自给自足**来实现一些个性化需求。

当然,如果你有一些自用好用的脚本也可以通过 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues)、[**Discussions**](https://github.com/XIU2/CloudflareSpeedTest/discussions) 或 **Pull requests** 发给我添加到这里让更多人用到!

> 小提示:点击↗右上角的三横杠图标按钮即可查看目录~

****
## 📑 cfst_hosts.sh / cfst_hosts.bat (已内置)
## 📑 cfst_hosts.sh / cfst_hosts.bat (已内置压缩包)

运行 CloudflareST 获得最快 IP 后,脚本会替换 Hosts 文件中的旧 CDN IP。
脚本会运行 CFST 获得最快 IP,并替换掉 Hosts 文件中的旧 CDN IP。

> **使用说明:https://github.com/XIU2/CloudflareSpeedTest/issues/42**
> **作者:**[@XIU2](https://github.com/xiu2)
> **使用说明/问题反馈:https://github.com/XIU2/CloudflareSpeedTest/discussions/312**

<details>
<summary><code><strong>「 更新日志」</strong></code></summary>

****

#### 2021年12月17日,版本 v1.0.6
#### 2025年12月15日,版本 v1.0.5 (cfst_hosts.bat)
- **1. 修复** CFST新版本下获取不到第一行 IP 的问题

#### 2021年12月17日,版本 v1.0.4
- **1. 优化** [找不到满足条件的 IP 就一直循环测速] 功能,在指定下载测速下限时没有重新测速的问题(默认注释)

#### 2021年12月17日,版本 v1.0.3
Expand All @@ -37,18 +52,22 @@

****

## 📑 cfst_3proxy.bat (已内置)
## 📑 cfst_3proxy.bat (已内置压缩包)

该脚本的作用为 CloudflareST 测速后获取最快 IP 并替换 3Proxy 配置文件中的 Cloudflare CDN IP。
脚本会运行 CFST 测速后获取最快 IP 并替换 3Proxy 配置文件中的旧 Cloudflare CDN IP。
可以把所有 Cloudflare CDN IP 都重定向至最快 IP,实现一劳永逸的加速所有使用 Cloudflare CDN 的网站(不需要一个个添加域名到 Hosts 了)。

> **使用说明:https://github.com/XIU2/CloudflareSpeedTest/discussions/71**
> **作者:**[@XIU2](https://github.com/xiu2)
> **使用说明/问题反馈:https://github.com/XIU2/CloudflareSpeedTest/discussions/71**

<details>
<summary><code><strong>「 更新日志」</strong></code></summary>

****

#### 2025年12月15日,版本 v1.0.6
- **1. 修复** CFST新版本下获取不到第一行 IP 的问题

#### 2021年12月17日,版本 v1.0.5
- **1. 优化** [找不到满足条件的 IP 就一直循环测速] 功能,在指定下载测速下限时没有重新测速的问题(默认注释)

Expand All @@ -72,17 +91,45 @@

****

## 📑 cfst_dnspod.sh

如果你的域名托管在 **dnspod**,则可以通过 dnspod 官方提供的 API 来自动更新域名解析记录!
脚本会运行 CFST 测速获得最快 IP,并通过 Cloudflare API 来更新域名解析记录为这个最快 IP。

> **作者:**[@imashen](https://github.com/imashen)
> **使用说明/问题反馈:https://github.com/XIU2/CloudflareSpeedTest/pull/533**

<details>
<summary><code><strong>「 更新日志」</strong></code></summary>

****

#### 2024年08月06日,版本 v1.0.0
- **1. 发布** 第一个版本

</details>

****

## 📑 cfst_ddns.sh / cfst_ddns.bat

如果你的域名托管在 Cloudflare,则可以通过 Cloudflare 官方提供的 API 来自动更新域名解析记录!
如果你的域名托管在 **Cloudflare**,则可以通过 Cloudflare 官方提供的 API 来自动更新域名解析记录!
脚本会运行 CFST 测速获得最快 IP,并通过 Cloudflare API 来更新域名解析记录为这个最快 IP。

> **使用说明:https://github.com/XIU2/CloudflareSpeedTest/issues/40**
> **作者:**[@XIU2](https://github.com/xiu2)
> **使用说明/问题反馈:https://github.com/XIU2/CloudflareSpeedTest/discussions/481**

<details>
<summary><code><strong>「 更新日志」</strong></code></summary>

****

#### 2025年12月15日,版本 v1.0.6 (cfst_ddns.bat)
- **1. 修复** CFST新版本下获取不到第一行 IP 的问题

#### 2024年10月06日,版本 v1.0.5
- **1. 新增** 支持 API 令牌方式(相比 API 密钥这种全局权限的,API 令牌可以自由控制权限)

#### 2021年12月17日,版本 v1.0.4
- **1. 新增** 找不到满足条件的 IP 就一直循环测速功能(默认注释)
- **2. 优化** 代码
Expand All @@ -103,7 +150,29 @@

****

## 📑 cfst_dnsmasq.sh

脚本会运行 CFST 测速后获取最快 IP 并替换 dnsmasq 配置文件中的旧 Cloudflare CDN IP。

> **作者:**[@Sving1024](https://github.com/Sving1024)
> **使用说明/问题反馈:https://github.com/XIU2/CloudflareSpeedTest/discussions/566**

<details>
<summary><code><strong>「 更新日志」</strong></code></summary>

****

#### 2025年01月22日,版本 v1.0.1
- **1. 修复** IPv6 的问题

#### 2024年12月28日,版本 v1.0.0
- **1. 发布** 第一个版本

</details>

****

## 功能建议/问题反馈

如果你遇到什么问题,可以先去 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues) 里看看是否有别人问过了(记得去看下 [**Closed**](https://github.com/XIU2/CloudflareSpeedTest/issues?q=is%3Aissue+is%3Aclosed) 的)
如果没找到类似问题,请新开个 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues/new) 来告诉我!
如果这些脚本使用过程中你遇到了什么问题,可以先去脚本对应的 **`使用说明`** 帖子里看看是否有别人问过了
如果没找到类似问题,那么就在脚本对应的 **`使用说明`** 帖子里直接评论问作者吧。
Loading