diff --git a/main b/main index 0df0d92..049dec6 100755 Binary files a/main and b/main differ diff --git a/main.go b/main.go index db6d66d..77b5bd9 100644 --- a/main.go +++ b/main.go @@ -1,30 +1,3 @@ -//////////////////////////////////////////////////////////////// -// -// Filename: main.go -// -// Version: 1.0 -// Created: 2022年10月25日 01时01分22秒 -// Revision: none -// Compiler: go -// -// Author: alpha -// Organization: alpha -// Contacts: chenxinquan@kylinos.cn -// -//////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////// -// Description: -//////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////// -// Log: -//////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////// -// Todo: -// -//////////////////////////////////////////////////////////////// package main @@ -34,6 +7,7 @@ import ( // "fmt" "flag" "strconv" + "main/src/Actuator" ) type Vul struct{ ParserNum int //协程数量 @@ -42,23 +16,33 @@ type Vul struct{ Kernel string //内核漏洞检测 Fuzz string //Fuzz BaseLine string //基线检测 + Update string //更新软件 + Docs string //生成报告 + PoolStatNum int //启动协程任务数 } func main(){ var vul Vul + result:=Actuator.OsCheck() + if result=="flase"{ + return + } flag.IntVar(&vul.ParserNum, "POOL_NUMS", 0, "set coprogram nums") var System = flag.Bool("system", false, "Use only system") var Kernel = flag.Bool("kernel", false, "Use only kernel") var Web = flag.Bool("web", false, "Use only web") var BaseLine = flag.Bool("baseline", false, "Use only baseline") - var All = flag.Bool("all", false, "ALL") - PoolStatNum :=0 + var All = flag.Bool("all", false, "'ALL' is check BaseLine、kernel and system") + var Update = flag.Bool("update", false, "update entire program") + vul.PoolStatNum =0 flag.Parse() + //初始化bool值 vul.System = strconv.FormatBool(*System) vul.Kernel = strconv.FormatBool(*Kernel) vul.Web = strconv.FormatBool(*Web) vul.BaseLine = strconv.FormatBool(*BaseLine) sAll :=strconv.FormatBool(*All) - Parser.ParameterParser(vul.System,vul.Kernel,vul.Web,vul.BaseLine,sAll,PoolStatNum,vul.ParserNum) + vul.Update=strconv.FormatBool(*Update) + Parser.ParameterParser(vul.System,vul.Kernel,vul.Web,vul.BaseLine,sAll,vul.PoolStatNum,vul.ParserNum,vul.Update) } diff --git a/src/Actuator/OsVbCheck.go b/src/Actuator/OsCheck.go similarity index 55% rename from src/Actuator/OsVbCheck.go rename to src/Actuator/OsCheck.go index c1cd808..54c584b 100644 --- a/src/Actuator/OsVbCheck.go +++ b/src/Actuator/OsCheck.go @@ -1,15 +1,16 @@ -package SystemVulnerabilities +package Actuator import ( "bytes" "fmt" "log" "os/exec" + "strings" ) -func SystemVulnerabilities() { - exePocFirst := "" - exePocSec := "" - cmd := exec.Command(exePocFirst,exePocSec) +func OsCheck()string { + var result string + cmdStr:="uname -a|awk '{print $1,$13}'" + cmd := exec.Command("/bin/bash", "-c", cmdStr) var stdout, stderr bytes.Buffer cmd.Stdout = &stdout // 标准输出 cmd.Stderr = &stderr // 标准错误 @@ -18,8 +19,16 @@ func SystemVulnerabilities() { if len(errStr)!=0{ fmt.Printf(errStr) } - fmt.Printf(outStr) + outStr=strings.TrimSpace(outStr) + if outStr=="Linux x86_64"{ + + result="true" + }else{ + + result="flase" + } if err != nil { log.Fatalf("cmd.Run() failed with %s\n", errStr) } -} \ No newline at end of file +return result +} diff --git a/src/Actuator/SSHActuator.go b/src/Actuator/SSHActuator.go new file mode 100644 index 0000000..b631459 --- /dev/null +++ b/src/Actuator/SSHActuator.go @@ -0,0 +1,2 @@ +package Actuator + diff --git a/src/Cache/Cache.go b/src/Cache/Cache.go new file mode 100644 index 0000000..d5f626f --- /dev/null +++ b/src/Cache/Cache.go @@ -0,0 +1,67 @@ +package Cache + +import ( + "fmt" + "github.com/patrickmn/go-cache" + "time" +) + +func SiteCache() { + // 创建一个默认过期时间为 5 分钟的缓存,每 10 分钟清除一次过期项目 + c := cache.New(5*time.Minute, 10*time.Minute) + + // 使用默认过期时间,将 key "foo" 的 vaule 设置为 "bar" + c.Set("foo", "bar", cache.DefaultExpiration) + + // 将 key "baz" 的 vaule 设置为 42,并设置为永不过期 + // (这个 item 将不会被移除,直到缓存被重置,或者通过 c.Delete("baz") 移除。) + c.Set("baz", 42, cache.NoExpiration) + + // 从缓存中获取与 key "foo" 关联的字符串 + v1, found := c.Get("set") + if found { + fmt.Printf("v1: %s\n", v1) + } + + // 因为 Go 是静态类型的,并且缓存值可以是任何东西, + // 所以当值被传递给不采用任意类型的函数(即 interface{})时,需要类型断言。 + // 对只会使用一次的值,执行此操作的最简单方法是: + // 示例 传递一个值给函数 + v2, found := c.Get("foo") + if found { + MyFunction(v2.(string)) + } + + // 如果在同一个函数中多次使用该值,这将变得乏味。 + // 可以改为执行以下任一操作: + if x, found := c.Get("foo"); found { + v3 := x.(string) + fmt.Printf("v3: %s\n", v3) + + // ... + } + // or + var v4 string + if x, found := c.Get("foo"); found { + v4 = x.(string) + } + fmt.Printf("v4: %s\n", v4) + // ... + // 然后 foo 可以作为字符串自由传递 + + // Want performance? Store pointers! + c.Set("foo", &MyStruct{Msg: "test"}, cache.DefaultExpiration) + if x, found := c.Get("foo"); found { + v5 := x.(*MyStruct) + fmt.Printf("v5: %s\n", v5) + // ... + } +} + +type MyStruct struct { + Msg string +} + +func MyFunction(msg string) { + fmt.Println(msg) +} \ No newline at end of file diff --git a/src/Parser/ParameterParser.go b/src/Parser/ParameterParser.go index 7e8d5c5..b6cf8a6 100644 --- a/src/Parser/ParameterParser.go +++ b/src/Parser/ParameterParser.go @@ -5,7 +5,7 @@ import( "fmt" "main/src/Pool" ) -func ParameterParser(sSystem string,sKernel string,sWeb string,sBaseLine string,sAll string,PoolStatNum int,ParserNum int){ +func ParameterParser(sSystem string,sKernel string,sWeb string,sBaseLine string,sAll string,PoolStatNum int,ParserNum int,Update string){ if sSystem=="true"{ PoolStatNum=PoolStatNum+1 } @@ -21,7 +21,10 @@ func ParameterParser(sSystem string,sKernel string,sWeb string,sBaseLine string, if sAll=="true"{ PoolStatNum=4 } - if sSystem!="true"&&sKernel!="true"&&sWeb!="true"&&sBaseLine!="true"&&sAll!="true"{ + if Update=="true"{ + fmt.Println("Updating") + } + if sSystem!="true"&&sKernel!="true"&&sWeb!="true"&&sBaseLine!="true"&&sAll!="true"&&Update!="true"{ flag.PrintDefaults() return }