mirror of https://gitee.com/openkylin/genmai.git
commit
08da248509
44
main.go
44
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
|
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)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
package Actuator
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue