mirror of
https://github.com/XIU2/CloudflareSpeedTest.git
synced 2026-03-07 23:25:53 +08:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9654cb8ea6 | ||
|
|
13bae9c6f8 | ||
|
|
f0fa3e4d0a | ||
|
|
b83734b426 | ||
|
|
c1348df16e | ||
|
|
c52750ad9c | ||
|
|
0e9461f3b7 | ||
|
|
07e20028cc | ||
|
|
4c92eae311 | ||
|
|
efdbc8f08e | ||
|
|
e85a03c651 |
37
README.md
37
README.md
@@ -10,25 +10,30 @@
|
||||
虽然 Cloudflare 公开了所有 [IP 段](https://www.cloudflare.com/ips/) ,但想要在这么多 IP 中找到适合自己的,怕是要累死,所以就有了这个软件。
|
||||
|
||||
该软件可以**测试 Cloudflare CDN 所有 IP 的延迟和速度,获得最快 IP**!
|
||||
你可以将 IP 添加到 `Hosts` 文件中,以提高访问使用 Cloudflare CDN 服务的国外网站速度!
|
||||
你可以将 IP 添加到 `Hosts` 文件中,以提高访问使用 Cloudflare CDN 的网站速度!
|
||||
|
||||
****
|
||||
### 快速使用
|
||||
|
||||
1. 下载编译好的可执行文件 [蓝奏云](https://www.lanzoux.com/b0742hkxe) / [Github](https://github.com/XIU2/CloudflareSpeedTest/releases) 并解压。
|
||||
2. 双击运行 `CloudflareST.exe`文件(Windows系统),等待测速...
|
||||
1. 下载编译好的可执行文件 [蓝奏云](https://xiu.lanzoux.com/b0742hkxe) / [Github](https://github.com/XIU2/CloudflareSpeedTest/releases) 并解压。
|
||||
2. 双击运行 `CloudflareST.exe`文件(Windows),等待测速...
|
||||
|
||||
测速完毕后,会显示最快的 20 个 IP,完整结果则保存在当前目录下的 `result.csv` 文件中,用记事本打开,排序为**延迟由低到高**,每一列用逗号分隔,分别是:
|
||||
> **注意:Linux 系统**请先赋予执行权限 `chmod +x CloudflareST` ,然后再执行 `./CloudflareST` 。
|
||||
|
||||
测速完毕后,会显示**最快**的 20 个 IP,完整结果则保存在当前目录下的 `result.csv` 文件中,用**记事本或表格软件**打开,排序为**延迟由低到高**,每一列用逗号分隔,分别是:
|
||||
```
|
||||
IP 地址, 测试次数, 成功次数, 成功比率, 平均延迟, 下载速度 (MB/s)
|
||||
104.27.70.18, 4, 4, 1.00, 150.79, 12.89
|
||||
IP 地址, 已发送, 已接收, 丢包率, 平均延迟, 下载速度 (MB/s)
|
||||
104.27.70.18, 4, 4, 0.00, 150.79, 12.89
|
||||
```
|
||||
选择一个平均延迟与下载速度都不错的 IP 放到 `Hosts` 文件中(指向域名)。
|
||||
选择一个平均延迟与下载速度都不错的 IP 放到 `Hosts` 文件中(指向使用 Cloudflare CDN 的网站域名)。
|
||||
|
||||
****
|
||||
### 进阶使用
|
||||
|
||||
直接双击运行使用的是默认参数,如果想要测试速度更快、测试结果更全面,可以自定义参数。
|
||||
|
||||
> **提示:Linux 系统**只需要把下面命令中的 **.exe 删除**即可通用。
|
||||
|
||||
``` cmd
|
||||
C:\>CloudflareST.exe -h
|
||||
|
||||
@@ -52,7 +57,7 @@ https://github.com/XIU2/CloudflareSpeedTest
|
||||
-f ip.txt
|
||||
IP 数据文件;相对/绝对路径,如包含空格请加上引号;支持其他 CDN IP段,记得禁用下载测速;(默认 ip.txt)
|
||||
-o result.csv
|
||||
输出结果文件;相对/绝对路径,如包含空格请加上引号;允许 .txt 等后缀;(默认 result.csv)
|
||||
输出结果文件;相对/绝对路径,如包含空格请加上引号;为空格时不输出结果文件( -o " " );允许其他后缀;(默认 result.csv)
|
||||
-dd
|
||||
禁用下载测速;如果带上该参数就是禁用下载测速;(默认 启用)
|
||||
-v
|
||||
@@ -62,6 +67,7 @@ https://github.com/XIU2/CloudflareSpeedTest
|
||||
|
||||
示例:
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -p 20 -f "ip.txt" -o "" -dd
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -f "ip.txt" -o "result.csv" -dd
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -f "C:\abc\ip.txt" -o "C:\abc\result.csv" -dd
|
||||
```
|
||||
@@ -70,15 +76,22 @@ https://github.com/XIU2/CloudflareSpeedTest
|
||||
|
||||
在 CMD 中运行,或者把启动参数添加到快捷方式中。
|
||||
> **注意:** 不需要加上所有参数,按需选择,参数前后顺序随意。
|
||||
> **提示: Linux 系统**只需要把下面命令中的 **.exe 删除**即可通用。
|
||||
|
||||
``` cmd
|
||||
# CMD 示例
|
||||
# 命令行示例
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10
|
||||
|
||||
# 指定 IP数据文件 及 输出结果文件(相对路径,即当前目录下)
|
||||
# 指定 IP数据文件,不显示结果直接退出(-p 值为 -1)
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -p -1 -f "ip.txt" -dd
|
||||
|
||||
# 指定 IP数据文件,不输出结果到文件,直接显示结果(-p 值为 20 条)
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -p 20 -f "ip.txt" -o " " -dd
|
||||
|
||||
# 指定 IP数据文件 及 输出结果到文件(相对路径,即当前目录下)
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -f "ip.txt" -o "result.csv" -dd
|
||||
|
||||
# 指定 IP数据文件 及 输出结果文件(绝对路径,即 C:\abc\ 目录下)
|
||||
# 指定 IP数据文件 及 输出结果到文件(绝对路径,即 C:\abc\ 目录下)
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -f "C:\abc\ip.txt" -o "C:\abc\result.csv" -dd
|
||||
```
|
||||
|
||||
@@ -92,7 +105,7 @@ CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -f "C:\abc\ip.txt" -o "C:\abc\result.
|
||||
### 感谢项目
|
||||
* https://github.com/Spedoske/CloudflareScanner
|
||||
|
||||
意外发现了这个项目,看了之后发现正好解决了我的问题,但是我更喜欢用户命令行方式运行,这样会更方便、有更多使用姿势,于是我临时学了下 Golang 并 Fork 修改了一份命令行方式交互的版本,如果有什么问题可以告诉我,虽然我不一定会~
|
||||
意外发现了这个项目,看了之后发现正好解决了我的问题,但是我更喜欢用户命令行方式运行,这样会更方便、有更多使用姿势,于是我临时学了下 Golang 并 Fork 按照我自己的需求修改了一下(包括但不限于命令行方式交互、直接输出结果等),如果有什么问题可以告诉我,虽然我不一定会~
|
||||
|
||||
****
|
||||
### 许可证
|
||||
|
||||
24
main.go
24
main.go
@@ -43,7 +43,7 @@ https://github.com/XIU2/CloudflareSpeedTest
|
||||
-f ip.txt
|
||||
IP 数据文件;相对/绝对路径,如包含空格请加上引号;支持其他 CDN IP段,记得禁用下载测速;(默认 ip.txt)
|
||||
-o result.csv
|
||||
输出结果文件;相对/绝对路径,如包含空格请加上引号;允许 .txt 等后缀;(默认 result.csv)
|
||||
输出结果文件;相对/绝对路径,如包含空格请加上引号;为空格时不输出结果文件( -o " " );允许其他后缀;(默认 result.csv)
|
||||
-dd
|
||||
禁用下载测速;如果带上该参数就是禁用下载测速;(默认 启用)
|
||||
-v
|
||||
@@ -53,6 +53,7 @@ https://github.com/XIU2/CloudflareSpeedTest
|
||||
|
||||
示例:
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -p 20 -f "ip.txt" -o " " -dd
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -f "ip.txt" -o "result.csv" -dd
|
||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10 -f "C:\abc\ip.txt" -o "C:\abc\result.csv" -dd`
|
||||
|
||||
@@ -96,8 +97,8 @@ https://github.com/XIU2/CloudflareSpeedTest
|
||||
if ipFile == "" {
|
||||
ipFile = "ip.txt"
|
||||
}
|
||||
if outputFile == "" {
|
||||
outputFile = "result.csv"
|
||||
if outputFile == " " {
|
||||
outputFile = ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,6 +145,10 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
if outputFile != "" {
|
||||
ExportCsv(outputFile, data) // 输出结果到文件
|
||||
}
|
||||
|
||||
// 直接输出结果
|
||||
if printResult > 0 { // 如果禁用下载测速就跳过
|
||||
dateString := convertToString(data) // 转为多维数组 [][]String
|
||||
@@ -152,18 +157,19 @@ func main() {
|
||||
printResult = len(dateString)
|
||||
fmt.Println("\n[信息] IP数量小于显示结果数量,显示结果数量改为IP数量。\n")
|
||||
}
|
||||
fmt.Println("\nIP 地址 \t", "测试次数\t", "成功次数\t", "成功比率\t", "平均延迟\t", "下载速度 (MB/s)")
|
||||
fmt.Printf("%-16s%-5s%-5s%-5s%-6s%-11s\n", "IP 地址", "已发送", "已接收", "丢包率", "平均延迟", "下载速度 (MB/s)")
|
||||
for i := 0; i < printResult; i++ {
|
||||
fmt.Println(dateString[i][0], "\t", dateString[i][1], "\t\t", dateString[i][2], "\t\t", dateString[i][3], "\t\t", dateString[i][4], "\t", dateString[i][5])
|
||||
fmt.Printf("%-18s%-8s%-8s%-8s%-10s%-15s\n", dateString[i][0], dateString[i][1], dateString[i][2], dateString[i][3], dateString[i][4], dateString[i][5])
|
||||
}
|
||||
if outputFile != "" {
|
||||
fmt.Printf("\n完整内容请查看 %v 文件。请按 回车键 或 Ctrl+C 退出。", outputFile)
|
||||
} else {
|
||||
fmt.Printf("\n请按 回车键 或 Ctrl+C 退出。")
|
||||
}
|
||||
fmt.Printf("\n完整内容请查看 %v 文件。请按 回车键 或 Ctrl+C 退出。", outputFile)
|
||||
var pause int
|
||||
fmt.Scanln(&pause)
|
||||
} else {
|
||||
fmt.Println("\n[信息] IP数量为 0,跳过输出结果。")
|
||||
}
|
||||
}
|
||||
|
||||
// 输出结果到文件
|
||||
ExportCsv(outputFile, data)
|
||||
}
|
||||
|
||||
9
util.go
9
util.go
@@ -23,7 +23,8 @@ type CloudflareIPData struct {
|
||||
|
||||
func (cf *CloudflareIPData) getRecvRate() float32 {
|
||||
if cf.recvRate == 0 {
|
||||
cf.recvRate = float32(cf.pingReceived) / float32(cf.pingCount)
|
||||
pingLost := cf.pingCount - cf.pingReceived
|
||||
cf.recvRate = float32(pingLost) / float32(cf.pingCount)
|
||||
}
|
||||
return cf.recvRate
|
||||
}
|
||||
@@ -36,7 +37,7 @@ func ExportCsv(filePath string, data []CloudflareIPData) {
|
||||
}
|
||||
defer fp.Close()
|
||||
w := csv.NewWriter(fp) //创建一个新的写入文件流
|
||||
w.Write([]string{"IP 地址", "测试次数", "成功次数", "成功比率", "平均延迟", "下载速度 (MB/s)"})
|
||||
w.Write([]string{"IP 地址", "已发送", "已接收", "丢包率", "平均延迟", "下载速度 (MB/s)"})
|
||||
w.WriteAll(convertToString(data))
|
||||
w.Flush()
|
||||
}
|
||||
@@ -73,7 +74,7 @@ const (
|
||||
NormalPing
|
||||
)
|
||||
|
||||
const url string = "https://apple.freecdn.workers.dev/105/media/us/iphone-11-pro/2019/3bd902e4-0752-4ac1-95f8-6225c32aec6d/films/product/iphone-11-pro-product-tpl-cc-us-2019_1280x720h.mp4"
|
||||
const url string = "https://speed.cloudflare.com/__down?bytes=314572800"
|
||||
|
||||
var downloadTestTime time.Duration
|
||||
|
||||
@@ -112,7 +113,7 @@ func (cfs CloudflareIPDataSet) Len() int {
|
||||
|
||||
func (cfs CloudflareIPDataSet) Less(i, j int) bool {
|
||||
if (cfs)[i].getRecvRate() != cfs[j].getRecvRate() {
|
||||
return cfs[i].getRecvRate() > cfs[j].getRecvRate()
|
||||
return cfs[i].getRecvRate() < cfs[j].getRecvRate()
|
||||
}
|
||||
return cfs[i].pingTime < cfs[j].pingTime
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user