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)
|
|
|
|
}
|
|
|
|
}
|