backtrace/backtrace/backtrace.go

55 lines
1.0 KiB
Go
Raw Normal View History

2024-05-01 16:17:44 +08:00
package backtrace
import (
"encoding/json"
"fmt"
"net/http"
"time"
. "github.com/oneclickvirt/backtrace/defaultset"
)
type IpInfo struct {
Ip string `json:"ip"`
City string `json:"city"`
Region string `json:"region"`
Country string `json:"country"`
Org string `json:"org"`
}
func BackTrace() {
var (
s [12]string // 对应 ips 目标地址数量
c = make(chan Result)
t = time.After(time.Second * 10)
)
rsp, err := http.Get("http://ipinfo.io")
if err != nil {
2024-05-18 11:00:03 +08:00
fmt.Errorf("Get ip info err %v \n", err.Error())
2024-05-01 21:39:16 +08:00
} else {
info := IpInfo{}
err = json.NewDecoder(rsp.Body).Decode(&info)
if err != nil {
2024-05-18 11:00:03 +08:00
fmt.Errorf("json decode err %v \n", err.Error())
2024-05-01 21:39:16 +08:00
} else {
fmt.Println(Green("国家: ") + White(info.Country) + Green(" 城市: ") + White(info.City) +
2024-05-18 11:00:03 +08:00
Green(" 服务商: ") + Blue(info.Org))
2024-05-01 21:39:16 +08:00
}
2024-05-01 16:17:44 +08:00
}
for i := range ips {
2024-05-22 00:15:44 +08:00
go trace(c, i)
2024-05-01 16:17:44 +08:00
}
loop:
for range s {
select {
case o := <-c:
s[o.i] = o.s
case <-t:
break loop
}
}
for _, r := range s {
fmt.Println(r)
}
}