!14 添加os check

Merge pull request !14 from 宋帮诚晋/song-dev
This commit is contained in:
宋帮诚晋 2022-11-01 13:05:56 +00:00 committed by Gitee
commit 08da248509
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
6 changed files with 104 additions and 39 deletions

BIN
main

Binary file not shown.

44
main.go
View File

@ -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 package main
@ -34,6 +7,7 @@ import (
// "fmt" // "fmt"
"flag" "flag"
"strconv" "strconv"
"main/src/Actuator"
) )
type Vul struct{ type Vul struct{
ParserNum int //协程数量 ParserNum int //协程数量
@ -42,23 +16,33 @@ type Vul struct{
Kernel string //内核漏洞检测 Kernel string //内核漏洞检测
Fuzz string //Fuzz Fuzz string //Fuzz
BaseLine string //基线检测 BaseLine string //基线检测
Update string //更新软件
Docs string //生成报告
PoolStatNum int //启动协程任务数
} }
func main(){ func main(){
var vul Vul var vul Vul
result:=Actuator.OsCheck()
if result=="flase"{
return
}
flag.IntVar(&vul.ParserNum, "POOL_NUMS", 0, "set coprogram nums") flag.IntVar(&vul.ParserNum, "POOL_NUMS", 0, "set coprogram nums")
var System = flag.Bool("system", false, "Use only system") var System = flag.Bool("system", false, "Use only system")
var Kernel = flag.Bool("kernel", false, "Use only kernel") var Kernel = flag.Bool("kernel", false, "Use only kernel")
var Web = flag.Bool("web", false, "Use only web") var Web = flag.Bool("web", false, "Use only web")
var BaseLine = flag.Bool("baseline", false, "Use only baseline") var BaseLine = flag.Bool("baseline", false, "Use only baseline")
var All = flag.Bool("all", false, "ALL") var All = flag.Bool("all", false, "'ALL' is check BaseLine、kernel and system")
PoolStatNum :=0 var Update = flag.Bool("update", false, "update entire program")
vul.PoolStatNum =0
flag.Parse() flag.Parse()
//初始化bool值 //初始化bool值
vul.System = strconv.FormatBool(*System) vul.System = strconv.FormatBool(*System)
vul.Kernel = strconv.FormatBool(*Kernel) vul.Kernel = strconv.FormatBool(*Kernel)
vul.Web = strconv.FormatBool(*Web) vul.Web = strconv.FormatBool(*Web)
vul.BaseLine = strconv.FormatBool(*BaseLine) vul.BaseLine = strconv.FormatBool(*BaseLine)
sAll :=strconv.FormatBool(*All) 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)
} }

View File

@ -1,15 +1,16 @@
package SystemVulnerabilities package Actuator
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"log" "log"
"os/exec" "os/exec"
"strings"
) )
func SystemVulnerabilities() { func OsCheck()string {
exePocFirst := "" var result string
exePocSec := "" cmdStr:="uname -a|awk '{print $1,$13}'"
cmd := exec.Command(exePocFirst,exePocSec) cmd := exec.Command("/bin/bash", "-c", cmdStr)
var stdout, stderr bytes.Buffer var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout // 标准输出 cmd.Stdout = &stdout // 标准输出
cmd.Stderr = &stderr // 标准错误 cmd.Stderr = &stderr // 标准错误
@ -18,8 +19,16 @@ func SystemVulnerabilities() {
if len(errStr)!=0{ if len(errStr)!=0{
fmt.Printf(errStr) fmt.Printf(errStr)
} }
fmt.Printf(outStr) outStr=strings.TrimSpace(outStr)
if outStr=="Linux x86_64"{
result="true"
}else{
result="flase"
}
if err != nil { if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", errStr) log.Fatalf("cmd.Run() failed with %s\n", errStr)
} }
return result
} }

View File

@ -0,0 +1,2 @@
package Actuator

67
src/Cache/Cache.go Normal file
View File

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

View File

@ -5,7 +5,7 @@ import(
"fmt" "fmt"
"main/src/Pool" "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"{ if sSystem=="true"{
PoolStatNum=PoolStatNum+1 PoolStatNum=PoolStatNum+1
} }
@ -21,7 +21,10 @@ func ParameterParser(sSystem string,sKernel string,sWeb string,sBaseLine string,
if sAll=="true"{ if sAll=="true"{
PoolStatNum=4 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() flag.PrintDefaults()
return return
} }