mirror of
https://github.com/XIU2/CloudflareSpeedTest.git
synced 2026-03-11 01:15:56 +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 公开了所有 [IP 段](https://www.cloudflare.com/ips/) ,但想要在这么多 IP 中找到适合自己的,怕是要累死,所以就有了这个软件。
|
||||||
|
|
||||||
该软件可以**测试 Cloudflare CDN 所有 IP 的延迟和速度,获得最快 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) 并解压。
|
1. 下载编译好的可执行文件 [蓝奏云](https://xiu.lanzoux.com/b0742hkxe) / [Github](https://github.com/XIU2/CloudflareSpeedTest/releases) 并解压。
|
||||||
2. 双击运行 `CloudflareST.exe`文件(Windows系统),等待测速...
|
2. 双击运行 `CloudflareST.exe`文件(Windows),等待测速...
|
||||||
|
|
||||||
测速完毕后,会显示最快的 20 个 IP,完整结果则保存在当前目录下的 `result.csv` 文件中,用记事本打开,排序为**延迟由低到高**,每一列用逗号分隔,分别是:
|
> **注意:Linux 系统**请先赋予执行权限 `chmod +x CloudflareST` ,然后再执行 `./CloudflareST` 。
|
||||||
|
|
||||||
|
测速完毕后,会显示**最快**的 20 个 IP,完整结果则保存在当前目录下的 `result.csv` 文件中,用**记事本或表格软件**打开,排序为**延迟由低到高**,每一列用逗号分隔,分别是:
|
||||||
```
|
```
|
||||||
IP 地址, 测试次数, 成功次数, 成功比率, 平均延迟, 下载速度 (MB/s)
|
IP 地址, 已发送, 已接收, 丢包率, 平均延迟, 下载速度 (MB/s)
|
||||||
104.27.70.18, 4, 4, 1.00, 150.79, 12.89
|
104.27.70.18, 4, 4, 0.00, 150.79, 12.89
|
||||||
```
|
```
|
||||||
选择一个平均延迟与下载速度都不错的 IP 放到 `Hosts` 文件中(指向域名)。
|
选择一个平均延迟与下载速度都不错的 IP 放到 `Hosts` 文件中(指向使用 Cloudflare CDN 的网站域名)。
|
||||||
|
|
||||||
****
|
****
|
||||||
### 进阶使用
|
### 进阶使用
|
||||||
|
|
||||||
直接双击运行使用的是默认参数,如果想要测试速度更快、测试结果更全面,可以自定义参数。
|
直接双击运行使用的是默认参数,如果想要测试速度更快、测试结果更全面,可以自定义参数。
|
||||||
|
|
||||||
|
> **提示:Linux 系统**只需要把下面命令中的 **.exe 删除**即可通用。
|
||||||
|
|
||||||
``` cmd
|
``` cmd
|
||||||
C:\>CloudflareST.exe -h
|
C:\>CloudflareST.exe -h
|
||||||
|
|
||||||
@@ -52,7 +57,7 @@ https://github.com/XIU2/CloudflareSpeedTest
|
|||||||
-f ip.txt
|
-f ip.txt
|
||||||
IP 数据文件;相对/绝对路径,如包含空格请加上引号;支持其他 CDN IP段,记得禁用下载测速;(默认 ip.txt)
|
IP 数据文件;相对/绝对路径,如包含空格请加上引号;支持其他 CDN IP段,记得禁用下载测速;(默认 ip.txt)
|
||||||
-o result.csv
|
-o result.csv
|
||||||
输出结果文件;相对/绝对路径,如包含空格请加上引号;允许 .txt 等后缀;(默认 result.csv)
|
输出结果文件;相对/绝对路径,如包含空格请加上引号;为空格时不输出结果文件( -o " " );允许其他后缀;(默认 result.csv)
|
||||||
-dd
|
-dd
|
||||||
禁用下载测速;如果带上该参数就是禁用下载测速;(默认 启用)
|
禁用下载测速;如果带上该参数就是禁用下载测速;(默认 启用)
|
||||||
-v
|
-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
|
||||||
|
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 "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
|
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 中运行,或者把启动参数添加到快捷方式中。
|
在 CMD 中运行,或者把启动参数添加到快捷方式中。
|
||||||
> **注意:** 不需要加上所有参数,按需选择,参数前后顺序随意。
|
> **注意:** 不需要加上所有参数,按需选择,参数前后顺序随意。
|
||||||
|
> **提示: Linux 系统**只需要把下面命令中的 **.exe 删除**即可通用。
|
||||||
|
|
||||||
``` cmd
|
``` cmd
|
||||||
# CMD 示例
|
# 命令行示例
|
||||||
CloudflareST.exe -n 500 -t 4 -dn 20 -dt 10
|
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
|
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
|
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
|
* 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
|
-f ip.txt
|
||||||
IP 数据文件;相对/绝对路径,如包含空格请加上引号;支持其他 CDN IP段,记得禁用下载测速;(默认 ip.txt)
|
IP 数据文件;相对/绝对路径,如包含空格请加上引号;支持其他 CDN IP段,记得禁用下载测速;(默认 ip.txt)
|
||||||
-o result.csv
|
-o result.csv
|
||||||
输出结果文件;相对/绝对路径,如包含空格请加上引号;允许 .txt 等后缀;(默认 result.csv)
|
输出结果文件;相对/绝对路径,如包含空格请加上引号;为空格时不输出结果文件( -o " " );允许其他后缀;(默认 result.csv)
|
||||||
-dd
|
-dd
|
||||||
禁用下载测速;如果带上该参数就是禁用下载测速;(默认 启用)
|
禁用下载测速;如果带上该参数就是禁用下载测速;(默认 启用)
|
||||||
-v
|
-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
|
||||||
|
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 "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`
|
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 == "" {
|
if ipFile == "" {
|
||||||
ipFile = "ip.txt"
|
ipFile = "ip.txt"
|
||||||
}
|
}
|
||||||
if outputFile == "" {
|
if outputFile == " " {
|
||||||
outputFile = "result.csv"
|
outputFile = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,6 +145,10 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if outputFile != "" {
|
||||||
|
ExportCsv(outputFile, data) // 输出结果到文件
|
||||||
|
}
|
||||||
|
|
||||||
// 直接输出结果
|
// 直接输出结果
|
||||||
if printResult > 0 { // 如果禁用下载测速就跳过
|
if printResult > 0 { // 如果禁用下载测速就跳过
|
||||||
dateString := convertToString(data) // 转为多维数组 [][]String
|
dateString := convertToString(data) // 转为多维数组 [][]String
|
||||||
@@ -152,18 +157,19 @@ func main() {
|
|||||||
printResult = len(dateString)
|
printResult = len(dateString)
|
||||||
fmt.Println("\n[信息] IP数量小于显示结果数量,显示结果数量改为IP数量。\n")
|
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++ {
|
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
|
var pause int
|
||||||
fmt.Scanln(&pause)
|
fmt.Scanln(&pause)
|
||||||
} else {
|
} else {
|
||||||
fmt.Println("\n[信息] IP数量为 0,跳过输出结果。")
|
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 {
|
func (cf *CloudflareIPData) getRecvRate() float32 {
|
||||||
if cf.recvRate == 0 {
|
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
|
return cf.recvRate
|
||||||
}
|
}
|
||||||
@@ -36,7 +37,7 @@ func ExportCsv(filePath string, data []CloudflareIPData) {
|
|||||||
}
|
}
|
||||||
defer fp.Close()
|
defer fp.Close()
|
||||||
w := csv.NewWriter(fp) //创建一个新的写入文件流
|
w := csv.NewWriter(fp) //创建一个新的写入文件流
|
||||||
w.Write([]string{"IP 地址", "测试次数", "成功次数", "成功比率", "平均延迟", "下载速度 (MB/s)"})
|
w.Write([]string{"IP 地址", "已发送", "已接收", "丢包率", "平均延迟", "下载速度 (MB/s)"})
|
||||||
w.WriteAll(convertToString(data))
|
w.WriteAll(convertToString(data))
|
||||||
w.Flush()
|
w.Flush()
|
||||||
}
|
}
|
||||||
@@ -73,7 +74,7 @@ const (
|
|||||||
NormalPing
|
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
|
var downloadTestTime time.Duration
|
||||||
|
|
||||||
@@ -112,7 +113,7 @@ func (cfs CloudflareIPDataSet) Len() int {
|
|||||||
|
|
||||||
func (cfs CloudflareIPDataSet) Less(i, j int) bool {
|
func (cfs CloudflareIPDataSet) Less(i, j int) bool {
|
||||||
if (cfs)[i].getRecvRate() != cfs[j].getRecvRate() {
|
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
|
return cfs[i].pingTime < cfs[j].pingTime
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user