7 Commits

Author SHA1 Message Date
xiu2
25fa4b65d8 优化 仅 Windows 系统才需要按下 回车键 或 Ctrl+C 退出 2020-11-12 08:11:38 +08:00
xiu2
dca761ec72 update 2020-11-11 22:56:53 +08:00
xiu2
0f5b18b305 update 2020-11-11 22:48:03 +08:00
xiu2
4e1678edc3 update 2020-11-11 19:35:47 +08:00
xiu2
65b451ec4d update 2020-11-11 19:28:14 +08:00
xiu2
72ecee9e26 update 2020-11-11 19:26:31 +08:00
xiu2
1d9f64a4a2 update 2020-11-11 18:19:12 +08:00
2 changed files with 41 additions and 26 deletions

View File

@@ -28,16 +28,16 @@
```
IP 地址 已发送 已接收 丢包率 平均延迟 下载速度 (MB/s)
104.27.199.141 4 4 0.00 139.52 11.71
104.22.73.158 4 4 0.00 141.38 6.74
104.27.204.240 4 4 0.00 142.02 4.65
104.22.72.117 4 4 0.00 143.63 12.00
104.22.75.117 4 4 0.00 145.75 3.92
104.22.77.24 4 4 0.00 146.00 5.86
104.22.66.140 4 4 0.00 146.50 9.47
104.22.78.104 4 4 0.00 146.75 13.00
104.22.69.208 4 4 0.00 147.00 19.07
104.27.194.10 4 4 0.00 148.02 21.05
104.27.198.101 4 4 0.00 126.52 12.71
104.22.43.157 4 4 0.00 129.38 16.74
104.27.214.140 4 4 0.00 132.02 4.65
104.22.42.165 4 4 0.00 133.63 12.00
104.22.35.177 4 4 0.00 135.75 3.92
104.22.87.44 4 4 0.00 136.00 5.86
104.22.67.122 4 4 0.00 136.50 9.47
104.22.88.154 4 4 0.00 140.75 13.00
104.22.69.218 4 4 0.00 142.00 19.07
104.27.184.10 4 4 0.00 148.02 21.05
...
```
@@ -60,7 +60,7 @@ IP 地址, 已发送, 已接收, 丢包率, 平均延迟, 下载速度 (MB/s)
``` cmd
C:\>CloudflareST.exe -h
CloudflareSpeedTest
CloudflareSpeedTest vX.X.X
测试 Cloudflare CDN 所有 IP 的延迟和速度,获取最快 IP
https://github.com/XIU2/CloudflareSpeedTest
@@ -100,11 +100,11 @@ https://github.com/XIU2/CloudflareSpeedTest
### 使用示例
在 CMD 中运行,或者把启动参数添加到快捷方式中。
> **提示: Linux 系统**只需要把下面命令中的 **.exe 删除**即可通用。
``` bash
# 命令行示例
# 注意:各参数均有默认值,只有不使用默认值时,才需要手动指定参数的值(按需选择),参数不分前后顺序。
# 提示: Linux 系统只需要把下面命令中的 .exe 删除即可通用
# 提示: Linux 系统只需要把下面命令中的 CloudflareST.exe 改为 ./CloudflareST 即可
# 指定 IP数据文件不显示结果直接退出-p 值为 0
CloudflareST.exe -p 0 -f ip.txt -dd
@@ -118,21 +118,27 @@ CloudflareST.exe -f ip.txt -o result.csv -dd
# 指定 IP数据文件 及 输出结果到文件(绝对路径,即 C:\abc\ 目录下,如果包含空格请加上引号)
CloudflareST.exe -f C:\abc\ip.txt -o C:\abc\result.csv -dd
# 指定下载测速地址(要求:可以直接下载的文件、文件大小超过 200MB、网站用的是 Cloudflare CDN如果包含空格请加上引号
# 指定下载测速地址(要求:可以直接下载、文件大小超过 200MB、用的是 Cloudflare CDN如果包含空格请加上引号
CloudflareST.exe -url https://cf.xiu2.xyz/Github/CloudflareSpeedTest.png
# 指定测速条件延迟时间上限200 ms下载速度下限0 MB/s数量10 个(只有同时满足三个条件时才会停止测速)
# 指定测速条件(只有同时满足三个条件时才会停止测速)
# 延迟时间上限200 ms下载速度下限0 MB/s数量10 个
CloudflareST.exe -tl 200 -dn 10
# 指定测速条件,延迟时间上限0 ms下载速度下限5 MB/s数量10 个(只有同时满足三个条件时才会停止测速)
# 延迟时间上限0 ms下载速度下限5 MB/s数量10 个
CloudflareST.exe -sl 5 -dn 10
# 指定测速条件,延迟时间上限200 ms下载速度下限5 MB/s数量10 个(只有同时满足三个条件时才会停止测速)
# 延迟时间上限200 ms下载速度下限5 MB/s数量10 个
CloudflareST.exe -tl 200 -sl 5 -dn 10
# 如果一直凑不够指定数量,会一直测速下去。
# 建议指定下载速度下限时,同时指定延迟时间上限,如果测试到指定延迟还没凑够数,就会终止测速。
# 如果一个满足条件的 IP 都没有,那么就会正常输出结果(和不指定条件一样)。
# 如果你需要通过外部程序进一步筛选处理,那么只需要判断测速结果数量,如果上千个说明一个满足条件的 IP 都没有。
```
``` cmd
# 快捷方式示例(右键快捷方式 - 目标)
# Windows 快捷方式示例(右键快捷方式 - 目标)
## 如果有引号就放在引号外面,记得引号和 - 之间有空格。
"D:\Program Files\CloudflareST\CloudflareST.exe" -n 500 -t 4 -dn 20 -dt 5
```

25
main.go
View File

@@ -4,6 +4,7 @@ import (
"flag"
"fmt"
"os"
"runtime"
"sort"
"strconv"
"sync"
@@ -192,7 +193,8 @@ func main() {
// 显示最快结果
func printResult(data []CloudflareIPData) {
if printResultNum > 0 { // 如果禁用下载测速就跳过
sysType := runtime.GOOS
if printResultNum > 0 { // 如果禁止直接输出结果就跳过
dateString := convertToString(data) // 转为多维数组 [][]String
if len(dateString) > 0 { // IP数组长度(IP数量) 大于 0 时继续
if len(dateString) < printResultNum { // 如果IP数组长度(IP数量) 小于 打印次数则次数改为IP数量
@@ -203,17 +205,24 @@ func printResult(data []CloudflareIPData) {
for i := 0; i < printResultNum; i++ {
fmt.Printf("%-18s%-8s%-8s%-8s%-10s%-15s\n", ipPadding(dateString[i][0]), dateString[i][1], dateString[i][2], dateString[i][3], dateString[i][4], dateString[i][5])
}
if outputFile != "" {
fmt.Printf("\n完整测速结果已写入 %v 文件,请使用记事本/表格软件查看。\n按下 回车键 或 Ctrl+C 退出。", outputFile)
} else {
fmt.Printf("\n请按 回车键 或 Ctrl+C 退出。")
if sysType == "windows" { // 如果是 Windows 系统,则需要按下 回车键 或 Ctrl+C 退出
if outputFile != "" {
fmt.Printf("\n完整测速结果已写入 %v 文件,请使用记事本/表格软件查看。\n按下 回车键 或 Ctrl+C 退出。", outputFile)
} else {
fmt.Printf("\n按下 回车键 或 Ctrl+C 退出。")
}
var pause int
fmt.Scanln(&pause)
} else { // 其它系统直接退出
if outputFile != "" {
fmt.Println("\n完整测速结果已写入 " + outputFile + " 文件,请使用记事本/表格软件查看。")
}
}
var pause int
fmt.Scanln(&pause)
} else {
fmt.Println("\n[信息] IP数量为 0跳过输出结果。")
}
} else {
fmt.Printf("\n测速结果已写入 %v 文件,请使用记事本/表格软件查看。", outputFile)
fmt.Println("\n完整测速结果已写入 " + outputFile + " 文件,请使用记事本/表格软件查看。")
}
}