mirror of
https://github.com/oneclickvirt/backtrace.git
synced 2025-08-28 18:20:38 +08:00
fix: 并发请求上游信息和路由检测
This commit is contained in:
parent
ab887766fb
commit
76508d7b27
64
cmd/main.go
64
cmd/main.go
@ -7,6 +7,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/oneclickvirt/backtrace/bgptools"
|
"github.com/oneclickvirt/backtrace/bgptools"
|
||||||
@ -24,6 +25,13 @@ type IpInfo struct {
|
|||||||
Org string `json:"org"`
|
Org string `json:"org"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ConcurrentResults struct {
|
||||||
|
bgpResult string
|
||||||
|
backtraceResult string
|
||||||
|
bgpError error
|
||||||
|
backtraceError error
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
go func() {
|
go func() {
|
||||||
http.Get("https://hits.spiritlhl.net/backtrace.svg?action=hit&title=Hits&title_bg=%23555555&count_bg=%230eecf8&edge_flat=false")
|
http.Get("https://hits.spiritlhl.net/backtrace.svg?action=hit&title=Hits&title_bg=%23555555&count_bg=%230eecf8&edge_flat=false")
|
||||||
@ -64,7 +72,32 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
preCheck := utils.CheckPublicAccess(3 * time.Second)
|
preCheck := utils.CheckPublicAccess(3 * time.Second)
|
||||||
if preCheck.Connected {
|
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()
|
||||||
|
}
|
||||||
|
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
|
var targetIP string
|
||||||
if specifiedIP != "" {
|
if specifiedIP != "" {
|
||||||
targetIP = specifiedIP
|
targetIP = specifiedIP
|
||||||
@ -72,23 +105,28 @@ func main() {
|
|||||||
targetIP = info.Ip
|
targetIP = info.Ip
|
||||||
}
|
}
|
||||||
if targetIP != "" {
|
if targetIP != "" {
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
result, err := bgptools.GetPoPInfo(targetIP)
|
result, err := bgptools.GetPoPInfo(targetIP)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
fmt.Print(result.Result)
|
results.bgpResult = result.Result
|
||||||
}
|
}
|
||||||
|
results.bgpError = err
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
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 preCheck.Connected && preCheck.StackType == "DualStack" {
|
if results.backtraceResult != "" {
|
||||||
result := backtrace.BackTrace(ipv6)
|
fmt.Printf("%s\n", results.backtraceResult)
|
||||||
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"))
|
|
||||||
}
|
}
|
||||||
fmt.Println(Yellow("准确线路自行查看详细路由,本测试结果仅作参考"))
|
fmt.Println(Yellow("准确线路自行查看详细路由,本测试结果仅作参考"))
|
||||||
fmt.Println(Yellow("同一目标地址多个线路时,检测可能已越过汇聚层,除第一个线路外,后续信息可能无效"))
|
fmt.Println(Yellow("同一目标地址多个线路时,检测可能已越过汇聚层,除第一个线路外,后续信息可能无效"))
|
||||||
|
Loading…
Reference in New Issue
Block a user