|
|
|
@ -4,6 +4,7 @@ import ( |
|
|
|
"encoding/json" |
|
|
|
"os" |
|
|
|
"path/filepath" |
|
|
|
"runtime" |
|
|
|
"scagent/util" |
|
|
|
|
|
|
|
"go.uber.org/zap" |
|
|
|
@ -38,23 +39,31 @@ type FlpList struct { |
|
|
|
|
|
|
|
// 获取文件路径
|
|
|
|
func (f *FileRpcService) GetFilePath(args *Args, replay *string) error { |
|
|
|
rootDir := args.FilePath |
|
|
|
|
|
|
|
// 启用日志
|
|
|
|
logger := util.NewProductionLogger() |
|
|
|
defer logger.Sync() |
|
|
|
// 并发处理
|
|
|
|
go scanFileUnderPath(args.FilePath, args.Scope, logger, replay) |
|
|
|
runtime.Gosched() |
|
|
|
//
|
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// 扫描指定目录下的文件,可以全部,也可以局部
|
|
|
|
func scanFileUnderPath(rootDir string, scope string, logger *zap.Logger, replay *string) { |
|
|
|
var flplist FlpList // 文件列表
|
|
|
|
|
|
|
|
// 遍历目录下的文件
|
|
|
|
var allFiles []string // 存储所有文件路径
|
|
|
|
var flplist FlpList // 文件列表
|
|
|
|
|
|
|
|
// 判断返回
|
|
|
|
// 读取所有的
|
|
|
|
|
|
|
|
// 递归遍历目录及其子目录
|
|
|
|
err := filepath.WalkDir(rootDir, func(path string, d os.DirEntry, err error) error { |
|
|
|
// 处理遍历过程中的错误(如权限不足)
|
|
|
|
if err != nil { |
|
|
|
logger.Error("访问路径出错", zap.Error(err)) |
|
|
|
//
|
|
|
|
if args.Scope == "all" { |
|
|
|
// 判断扫描范围
|
|
|
|
if scope == "all" { |
|
|
|
return filepath.SkipDir |
|
|
|
} else { |
|
|
|
return nil |
|
|
|
@ -70,9 +79,9 @@ func (f *FileRpcService) GetFilePath(args *Args, replay *string) error { |
|
|
|
// 打印错误日志
|
|
|
|
if err != nil { |
|
|
|
logger.Error("遍历目录出错", zap.Error(err)) |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
//
|
|
|
|
// 打印所有文件路径
|
|
|
|
for _, file := range allFiles { |
|
|
|
// 打印所有文件路径
|
|
|
|
@ -87,18 +96,8 @@ func (f *FileRpcService) GetFilePath(args *Args, replay *string) error { |
|
|
|
jsonStr, err := json.Marshal(flplist) |
|
|
|
if err != nil { |
|
|
|
logger.Error("转换为json字符串出错", zap.Error(err)) |
|
|
|
return err |
|
|
|
} |
|
|
|
// fmt.Printf("jsonStr: %s\n", jsonStr)
|
|
|
|
// 执行结果存到replay
|
|
|
|
*replay = string(jsonStr) |
|
|
|
|
|
|
|
//
|
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
func (f *FileRpcService) GetFileHash(args *Args, replay *Reply) error { |
|
|
|
// 计算文件hash
|
|
|
|
hash := util.CalacHash(args.FilePath) |
|
|
|
replay.Redata = hash |
|
|
|
return nil |
|
|
|
} |
|
|
|
|