package main import ( "DockerST/task" "DockerST/utils" "flag" "fmt" "os" "runtime" "time" ) var ( version, versionNew string ) func init() { var printVersion bool 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, "下载测速数量") flag.IntVar(&downloadTime, "dt", 10, "下载测速时间") flag.IntVar(&task.TCPPort, "tp", 443, "指定测速端口") flag.StringVar(&task.URL, "url", "https://cf.xiu2.xyz/url", "指定测速地址") flag.BoolVar(&task.Httping, "httping", false, "切换测速模式") flag.IntVar(&task.HttpingStatusCode, "httping-code", 0, "有效状态代码") flag.StringVar(&task.HttpingCFColo, "cfcolo", "", "匹配指定地区") 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, "显示结果数量") flag.StringVar(&task.IPFile, "f", "ip.txt", "IP段数据文件") flag.StringVar(&task.IPText, "ip", "", "指定IP段数据") flag.StringVar(&utils.Output, "o", "result.csv", "输出结果文件") flag.BoolVar(&task.IsOff, "off", false, "关闭在线读取列表") flag.BoolVar(&task.Disable, "dd", false, "禁用下载测速") flag.BoolVar(&task.TestAll, "allip", false, "测速全部 IP") flag.BoolVar(&printVersion, "v", false, "打印程序版本") flag.StringVar(&utils.DefaultDockerUrl, "docker-url", utils.DefaultDockerUrl, "Docker 地址") flag.BoolVar(&task.IsOff, "om", false, "关闭在线读取列表") if task.MinSpeed > 0 && time.Duration(maxDelay)*time.Millisecond == utils.InputMaxDelay { fmt.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() if printVersion { println(version) fmt.Println("检查版本更新中...") checkUpdate() if versionNew != "" { fmt.Printf("*** 发现新版本 [%s]!请前往 [https://github.com/sxhoio/DockerST] 更新! ***", versionNew) } else { fmt.Println("当前为最新版本 [" + version + "]!") } os.Exit(0) } } func main() { task.InitRandSeed() // 置随机数种子 fmt.Printf("# sxhoio/DockerST %s \n\n", version) // 开始延迟测速 + 过滤延迟/丢包 pingData := task.NewPing().Run().FilterDelay().FilterLossRate() // 开始下载测速 speedData := task.TestDownloadSpeed(pingData) speedData.DockerSet() // 替换节点 if versionNew != "" { fmt.Printf("\n*** 发现新版本 [%s]!请前往 [https://github.com/sxhoio/DockerST] 更新! ***\n", versionNew) } endPrint() } func endPrint() { if utils.NoPrintResult() { return } if runtime.GOOS == "windows" { // 如果是 Windows 系统,则需要按下 回车键 或 Ctrl+C 退出(避免通过双击运行时,测速完毕后直接关闭) fmt.Printf("按下 回车键 或 Ctrl+C 退出。") _, _ = fmt.Scanln() } } // 检查更新 func checkUpdate() { // 暂无 }