From 76508d7b273983859709e9cbb852a94dcb21977c Mon Sep 17 00:00:00 2001 From: spiritlhl <103393591+spiritLHLS@users.noreply.github.com> Date: Mon, 11 Aug 2025 02:25:27 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B9=B6=E5=8F=91=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E4=B8=8A=E6=B8=B8=E4=BF=A1=E6=81=AF=E5=92=8C=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/main.go | 78 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 20 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 2522538..eefc2f6 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "runtime" + "sync" "time" "github.com/oneclickvirt/backtrace/bgptools" @@ -24,6 +25,13 @@ type IpInfo struct { Org string `json:"org"` } +type ConcurrentResults struct { + bgpResult string + backtraceResult string + bgpError error + backtraceError error +} + func main() { go func() { http.Get("https://hits.spiritlhl.net/backtrace.svg?action=hit&title=Hits&title_bg=%23555555&count_bg=%230eecf8&edge_flat=false") @@ -64,31 +72,61 @@ func main() { } } preCheck := utils.CheckPublicAccess(3 * time.Second) - if preCheck.Connected { - var targetIP string - if specifiedIP != "" { - targetIP = specifiedIP - } else if info.Ip != "" { - targetIP = info.Ip + if !preCheck.Connected { + fmt.Println(Red("PreCheck IP Type Failed")) + if runtime.GOOS == "windows" || runtime.GOOS == "darwin" { + fmt.Println("Press Enter to exit...") + fmt.Scanln() } - if targetIP != "" { + return + } + var useIPv6 bool + switch preCheck.StackType { + case "DualStack": + useIPv6 = ipv6 + case "IPv4": + useIPv6 = false + case "IPv6": + useIPv6 = true + default: + fmt.Println(Red("PreCheck IP Type Failed")) + if runtime.GOOS == "windows" || runtime.GOOS == "darwin" { + fmt.Println("Press Enter to exit...") + fmt.Scanln() + } + return + } + results := ConcurrentResults{} + var wg sync.WaitGroup + var targetIP string + if specifiedIP != "" { + targetIP = specifiedIP + } else if info.Ip != "" { + targetIP = info.Ip + } + if targetIP != "" { + wg.Add(1) + go func() { + defer wg.Done() result, err := bgptools.GetPoPInfo(targetIP) if err == nil { - fmt.Print(result.Result) + results.bgpResult = result.Result } - } + results.bgpError = err + }() } - if preCheck.Connected && preCheck.StackType == "DualStack" { - result := backtrace.BackTrace(ipv6) - fmt.Printf("%s\n", result) - } else if preCheck.Connected && preCheck.StackType == "IPv4" { - result := backtrace.BackTrace(false) - fmt.Printf("%s\n", result) - } else if preCheck.Connected && preCheck.StackType == "IPv6" { - result := backtrace.BackTrace(true) - fmt.Printf("%s\n", result) - } else { - fmt.Println(Red("PreCheck IP Type Failed")) + wg.Add(1) + go func() { + defer wg.Done() + result := backtrace.BackTrace(useIPv6) + results.backtraceResult = result + }() + wg.Wait() + if results.bgpResult != "" { + fmt.Print(results.bgpResult) + } + if results.backtraceResult != "" { + fmt.Printf("%s\n", results.backtraceResult) } fmt.Println(Yellow("准确线路自行查看详细路由,本测试结果仅作参考")) fmt.Println(Yellow("同一目标地址多个线路时,检测可能已越过汇聚层,除第一个线路外,后续信息可能无效"))