mirror of
https://github.com/sairson/Yasso.git
synced 2026-11-01 21:25:38 +08:00
Yasso更新大改动,更新扫描方式,去除不常用功能,增加指纹和协议识别,修补bug等
This commit is contained in:
199
core/logger/logger.go
Normal file
199
core/logger/logger.go
Normal file
@@ -0,0 +1,199 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"Yasso/config"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/gookit/color"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var (
|
||||
Cyan = color.Cyan.Render
|
||||
Red = color.Red.Render
|
||||
LightGreen = color.Style{color.Green, color.OpBold}.Render
|
||||
LightRed = color.Style{color.Red, color.OpBold}.Render
|
||||
)
|
||||
|
||||
const (
|
||||
PortSave = 1
|
||||
HostSave = 2
|
||||
WeakPassSave = 3
|
||||
InformationSave = 4
|
||||
VulnerabilitySave = 5
|
||||
)
|
||||
|
||||
var LogFile string
|
||||
var LogJson string
|
||||
var mutex sync.Mutex
|
||||
|
||||
func Info(in ...interface{}) {
|
||||
mutex.Lock()
|
||||
var all []interface{}
|
||||
for k, v := range in {
|
||||
if k == len(in)-1 {
|
||||
all = append(all, fmt.Sprintf("%v", v))
|
||||
} else {
|
||||
all = append(all, fmt.Sprintf("%v ", v))
|
||||
}
|
||||
}
|
||||
fmt.Println(fmt.Sprintf("[%s] ", Cyan("*")) + fmt.Sprint(all...))
|
||||
|
||||
file, err := os.OpenFile(LogFile, os.O_APPEND|os.O_CREATE|os.O_SYNC, 0666)
|
||||
if err != nil {
|
||||
Fatal("open file has an error", err.Error())
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
_, _ = file.WriteString(fmt.Sprintf("[*] " + fmt.Sprint(all...) + "\n"))
|
||||
mutex.Unlock()
|
||||
}
|
||||
|
||||
func Success(in ...interface{}) {
|
||||
mutex.Lock()
|
||||
var all []interface{}
|
||||
for k, v := range in {
|
||||
if k == len(in)-1 {
|
||||
all = append(all, fmt.Sprintf("%v", v))
|
||||
} else {
|
||||
all = append(all, fmt.Sprintf("%v ", v))
|
||||
}
|
||||
}
|
||||
fmt.Println(fmt.Sprintf("[%s] ", LightGreen("+")) + fmt.Sprint(all...))
|
||||
|
||||
file, err := os.OpenFile(LogFile, os.O_APPEND|os.O_CREATE|os.O_SYNC, 0666)
|
||||
if err != nil {
|
||||
Fatal("open file has an error", err.Error())
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
_, err = file.WriteString(fmt.Sprintf("[+] " + fmt.Sprint(all...) + "\n"))
|
||||
mutex.Unlock()
|
||||
}
|
||||
|
||||
func Fatal(in ...interface{}) {
|
||||
var all []interface{}
|
||||
for k, v := range in {
|
||||
if k == len(in)-1 {
|
||||
all = append(all, fmt.Sprintf("%v", v))
|
||||
} else {
|
||||
all = append(all, fmt.Sprintf("%v ", v))
|
||||
}
|
||||
}
|
||||
fmt.Println(fmt.Sprintf("[%s] ", Red("#")) + fmt.Sprint(all...))
|
||||
}
|
||||
|
||||
// JSONSave 保存json格式数据
|
||||
func JSONSave(host string, t int, in ...interface{}) {
|
||||
if LogJson != "" {
|
||||
switch t {
|
||||
case VulnerabilitySave:
|
||||
for _, v := range config.JSONSave {
|
||||
// 服务存在
|
||||
if v.Host == host {
|
||||
v.Vulnerability = append(v.Vulnerability, in[0].(string))
|
||||
}
|
||||
}
|
||||
case PortSave:
|
||||
// 端口存储
|
||||
var flag = false
|
||||
for _, v := range config.JSONSave {
|
||||
// 服务存在
|
||||
if v.Host == host {
|
||||
v.Port = in[0].([]int) // 将端口存储
|
||||
flag = true
|
||||
}
|
||||
}
|
||||
if flag == false {
|
||||
config.JSONSave = append(config.JSONSave, &config.Format{
|
||||
Host: host,
|
||||
})
|
||||
for _, v := range config.JSONSave {
|
||||
// 服务存在
|
||||
if v.Host == host {
|
||||
v.Port = in[0].([]int) // 将端口存储
|
||||
flag = true
|
||||
}
|
||||
}
|
||||
}
|
||||
case HostSave:
|
||||
// 主机存储
|
||||
config.JSONSave = append(config.JSONSave, &config.Format{
|
||||
Host: host,
|
||||
})
|
||||
case WeakPassSave:
|
||||
// 这里存储json的服务弱口令
|
||||
for _, v := range config.JSONSave {
|
||||
// 服务名称已经有了,那么将口令加到它的WeakPass种
|
||||
// 如果主机之前也是存活的
|
||||
if v.Host == host {
|
||||
// 遍历主机的服务列表
|
||||
var flag = false
|
||||
for _, value := range v.Service {
|
||||
if value.Name == in[0].(string) { // 服务名
|
||||
value.WeakPass = append(value.WeakPass, in[1].(map[string]string))
|
||||
flag = true // 证明服务存在
|
||||
}
|
||||
}
|
||||
// 证明host存在
|
||||
if flag == false {
|
||||
v.Service = append(v.Service, &config.Service{
|
||||
Name: in[0].(string), //服务名
|
||||
WeakPass: []map[string]string{in[1].(map[string]string)},
|
||||
})
|
||||
}
|
||||
// 证明host存在
|
||||
if flag == false {
|
||||
v.Service = append(v.Service, &config.Service{
|
||||
Name: in[0].(string), //服务名
|
||||
WeakPass: []map[string]string{in[1].(map[string]string)},
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
case 4:
|
||||
// 这里information字段
|
||||
for _, v := range config.JSONSave {
|
||||
// 服务名称已经有了,那么将口令加到它的WeakPass种
|
||||
// 如果主机之前也是存活的
|
||||
if v.Host == host {
|
||||
// 遍历主机的服务列表
|
||||
var flag = false
|
||||
for _, value := range v.Service {
|
||||
if value.Name == in[0].(string) { // 服务名
|
||||
value.Information = append(value.Information, in[1].(string))
|
||||
flag = true // 证明服务存在
|
||||
}
|
||||
}
|
||||
// 证明host存在
|
||||
if flag == false {
|
||||
v.Service = append(v.Service, &config.Service{
|
||||
Name: in[0].(string), //服务名
|
||||
Information: []string{in[1].(string)},
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 将以json格式保存,文件将会保存全局变量存储的结果集
|
||||
}
|
||||
}
|
||||
|
||||
func LoggerSave() {
|
||||
if LogJson != "" {
|
||||
body, err := json.Marshal(config.JSONSave)
|
||||
if err != nil {
|
||||
Fatal("save json marshal failed", err.Error())
|
||||
return
|
||||
}
|
||||
filePtr, err := os.Create(LogJson)
|
||||
if err != nil {
|
||||
fmt.Println("文件创建失败", err.Error())
|
||||
return
|
||||
}
|
||||
defer filePtr.Close()
|
||||
// 创建Json编码器
|
||||
_, _ = filePtr.Write(body)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user