From def9706e895fe40e85c619862408975c199cbe27 Mon Sep 17 00:00:00 2001 From: piexlmax <303176530@qq.com> Date: Tue, 7 Jun 2022 22:11:32 +0800 Subject: [PATCH] Package compatible 1.16 and 1.18 --- service/auxiliarygt18.go | 117 +++++++++++++++++++++ service/{auxiliary.go => auxiliarylt18.go} | 3 + 2 files changed, 120 insertions(+) create mode 100644 service/auxiliarygt18.go rename service/{auxiliary.go => auxiliarylt18.go} (99%) diff --git a/service/auxiliarygt18.go b/service/auxiliarygt18.go new file mode 100644 index 0000000..4bcd7e7 --- /dev/null +++ b/service/auxiliarygt18.go @@ -0,0 +1,117 @@ +//go:build go1.18 +// +build go1.18 + +package service + +import ( + "debug/buildinfo" + "fmt" + "github.com/HXSecurity/DongTai-agent-go/model/request" + "github.com/HXSecurity/DongTai-agent-go/utils" + "github.com/pkg/errors" + "io/fs" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" +) + +// GenAQLForGolang 为golang组件生成aql +func GenAQLForGolang(packageName, version string) string { + return fmt.Sprintf("golang:%s:%s:", packageName, version) +} + +// 获取包 +func GetMod() ([]request.Component, string) { + //fmt.Println(getCurrentPath()) + path, _ := os.Executable() + return scanFile(path, true) +} + +// 判断是否是exe文件 +func isExe(file string, info fs.FileInfo) bool { + if runtime.GOOS == "windows" { + return strings.HasSuffix(strings.ToLower(file), ".exe") + } + return info.Mode().IsRegular() && info.Mode()&0111 != 0 +} + +// 从二进制文件读取包信息 +func scanFile(file string, mustPrint bool) (packages []request.Component, agentVersion string) { + bi, err := buildinfo.ReadFile(file) + if err != nil { + if mustPrint { + if pathErr := (*os.PathError)(nil); errors.As(err, &pathErr) && filepath.Clean(pathErr.Path) == filepath.Clean(file) { + fmt.Fprintf(os.Stderr, "%v\n", file) + } else { + fmt.Fprintf(os.Stderr, "%s: %v\n", file, err) + } + } + return packages, agentVersion + } + fmt.Printf("%s: %s\n", file, bi.GoVersion) + bi.GoVersion = "" // suppress printing go version again + mod := bi.String() + + li := strings.Split(mod[:len(mod)-1], "\n") + for i := range li { + licl := strings.Split(li[i], "\t") + if licl[0] == "dep" { + fmt.Printf("依赖:%s\t版本:%s\n", licl[1], licl[2]) + aql := GenAQLForGolang(licl[1], licl[2]) + if licl[1] == "github.com/HXSecurity/DongTai-agent-go" { + fmt.Println("当前探针版本为:" + licl[2]) + agentVersion = licl[2] + } + packages = append(packages, request.Component{ + PackageName: aql, + PackageAlgorithm: "SHA-1", + PackagePath: file, + PackageVersion: licl[2], + PackageSignature: utils.SHA1(aql), + }, + ) + } + } + return packages, agentVersion +} + +// 获取服务信息 +func getServerInfo() (server *utils.Server, err error) { + var s utils.Server + s.Os = utils.InitOS() + if s.Cpu, err = utils.InitCPU(); err != nil { + fmt.Println(err.Error()) + return &s, err + } + if s.Rrm, err = utils.InitRAM(); err != nil { + fmt.Println(err.Error()) + return &s, err + } + if s.Disk, err = utils.InitDisk(); err != nil { + fmt.Println(err.Error()) + return &s, err + } + + return &s, nil +} + +func getCurrentPath() (string, error) { + file, err := exec.LookPath(os.Args[0]) + if err != nil { + return "", err + } + path, err := filepath.Abs(file) + if err != nil { + return "", err + } + i := strings.LastIndex(path, "/") + if i < 0 { + i = strings.LastIndex(path, "\\") + } + if i < 0 { + return "", errors.New(`error: Can't find "/" or "\".`) + } + return string(path[0 : i+1]), nil +} diff --git a/service/auxiliary.go b/service/auxiliarylt18.go similarity index 99% rename from service/auxiliary.go rename to service/auxiliarylt18.go index 93b63d6..95ee5a7 100644 --- a/service/auxiliary.go +++ b/service/auxiliarylt18.go @@ -1,3 +1,6 @@ +//go:build !go1.18 +// +build !go1.18 + package service import (