This commit is contained in:
spiritlhl 2024-06-24 05:07:48 +00:00
parent bc36b6b030
commit c99e477cd5
8 changed files with 34 additions and 105 deletions

View File

@ -5,7 +5,7 @@ import (
"net"
"strings"
. "github.com/oneclickvirt/backtrace/defaultset"
. "github.com/oneclickvirt/basics/defaultset"
)
type Result struct {

View File

@ -1,41 +1,16 @@
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)
s [12]string // 对应 ips 目标地址数量
c = make(chan Result)
t = time.After(time.Second * 10)
)
rsp, err := http.Get("http://ipinfo.io")
if err != nil {
fmt.Errorf("Get ip info err %v \n", err.Error())
} else {
info := IpInfo{}
err = json.NewDecoder(rsp.Body).Decode(&info)
if err != nil {
fmt.Errorf("json decode err %v \n", err.Error())
} else {
fmt.Println(Green("国家: ") + White(info.Country) + Green(" 城市: ") + White(info.City) +
Green(" 服务商: ") + Blue(info.Org))
}
}
for i := range ips {
go trace(c, i)
}

3
backtrace/version.go Normal file
View File

@ -0,0 +1,3 @@
package backtrace
const Version = "0.0.1"

View File

@ -1,17 +1,40 @@
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/oneclickvirt/backtrace/backtrace"
. "github.com/oneclickvirt/backtrace/defaultset"
. "github.com/oneclickvirt/basics/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 main() {
go func() {
http.Get("https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Foneclickvirt%2Fbacktrace&count_bg=%2323E01C&title_bg=%23555555&icon=sonarcloud.svg&icon_color=%23E7E7E7&title=hits&edge_flat=false")
}()
fmt.Println(Green("项目地址:"), Yellow("https://github.com/oneclickvirt/backtrace"))
rsp, err := http.Get("http://ipinfo.io")
if err != nil {
fmt.Errorf("Get ip info err %v \n", err.Error())
} else {
info := IpInfo{}
err = json.NewDecoder(rsp.Body).Decode(&info)
if err != nil {
fmt.Errorf("json decode err %v \n", err.Error())
} else {
fmt.Println(Green("国家: ") + White(info.Country) + Green(" 城市: ") + White(info.City) +
Green(" 服务商: ") + Blue(info.Org))
}
}
backtrace.BackTrace()
fmt.Println(Yellow("准确线路自行查看详细路由,本测试结果仅作参考"))
fmt.Println(Yellow("同一目标地址多个线路时,可能检测已越过汇聚层,除了第一个线路外,后续信息可能无效"))

View File

@ -1,35 +0,0 @@
package defaultset
import "fmt"
func Red(text string) string {
return fmt.Sprintf("\033[31m\033[01m%s\033[0m", text)
}
func Green(text string) string {
return fmt.Sprintf("\033[32m\033[01m%s\033[0m", text)
}
func DarkGreen(text string) string {
return fmt.Sprintf("\033[32m\033[02m%s\033[0m", text)
}
func Yellow(text string) string {
return fmt.Sprintf("\033[33m\033[01m%s\033[0m", text)
}
func Blue(text string) string {
return fmt.Sprintf("\033[36m\033[01m%s\033[0m", text)
}
func Purple(text string) string {
return fmt.Sprintf("\033[35m\033[01m%s\033[0m", text)
}
func Cyan(text string) string {
return fmt.Sprintf("\033[36m\033[01m%s\033[0m", text)
}
func White(text string) string {
return fmt.Sprintf("\033[37m\033[01m%s\033[0m", text)
}

View File

@ -1,40 +0,0 @@
package defaultset
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var Logger *zap.Logger
func getZapConfig() zap.Config {
cfg := zap.Config{
Encoding: "console", // 日志编码格式
Level: zap.NewAtomicLevelAt(zap.InfoLevel), // 日志级别
OutputPaths: []string{"ecs.log"}, // 输出路径,可以是多个文件
ErrorOutputPaths: []string{}, // 错误输出路径,可以是多个文件
EncoderConfig: zapcore.EncoderConfig{
TimeKey: "timestamp", // 时间字段名称
LevelKey: "level", // 日志级别字段名称
NameKey: "logger", // 日志记录器名称字段名称
CallerKey: "caller", // 调用者信息字段名称
MessageKey: "message", // 日志消息字段名称
StacktraceKey: "stacktrace", // 堆栈跟踪信息字段名称
EncodeLevel: zapcore.LowercaseLevelEncoder, // 小写格式的日志级别编码器
EncodeTime: zapcore.ISO8601TimeEncoder, // ISO8601 时间格式编码器
EncodeCaller: zapcore.ShortCallerEncoder, // 编码短调用者信息
},
}
return cfg
}
// InitLogger 初始化日志记录器
func InitLogger() {
// 配置日志记录器
cfg := getZapConfig()
var err error
Logger, err = cfg.Build()
if err != nil {
panic("failed to initialize logger: " + err.Error())
}
}

1
go.mod
View File

@ -9,6 +9,7 @@ require (
)
require (
github.com/oneclickvirt/basics v0.0.0-20240524033341-86198d11d5f0 // indirect
github.com/stretchr/testify v1.9.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
)

2
go.sum
View File

@ -1,5 +1,7 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/oneclickvirt/basics v0.0.0-20240524033341-86198d11d5f0 h1:ve6vWhPr+nN0msYTPLzjaMp2Mch/vc5bsV0OKmLt8Nc=
github.com/oneclickvirt/basics v0.0.0-20240524033341-86198d11d5f0/go.mod h1:WJP9pAByPMKujLhCtFMp+7ljd31jjLCQkIRPRSukEZA=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=