Update executor.go

This commit is contained in:
公明
2025-12-07 15:11:27 +08:00
committed by GitHub
parent b6de10df65
commit 1a2e14aa88

View File

@@ -8,7 +8,6 @@ import (
"os/exec"
"strconv"
"strings"
"time"
"cyberstrike-ai/internal/config"
"cyberstrike-ai/internal/mcp"
@@ -383,7 +382,16 @@ func (e *Executor) buildCommandArgs(toolName string, toolConfig *config.ToolConf
// 然后处理位置参数(位置参数通常在标志参数之后)
// 对位置参数按位置排序
for i := 0; i < len(positionalParams); i++ {
// 首先找到最大的位置值,确定需要处理多少个位置
maxPosition := -1
for _, param := range positionalParams {
if param.Position != nil && *param.Position > maxPosition {
maxPosition = *param.Position
}
}
// 按位置顺序处理参数,确保即使某些位置没有参数或使用默认值,也能正确传递
for i := 0; i <= maxPosition; i++ {
for _, param := range positionalParams {
// 跳过特殊参数,它们会在后面单独处理
// action 参数仅用于工具内部逻辑,不传递给命令
@@ -407,13 +415,19 @@ func (e *Executor) buildCommandArgs(toolName string, toolConfig *config.ToolConf
if param.Default != nil {
value = param.Default
} else {
// 如果没有默认值,跳过这个位置,继续处理下一个位置
break
}
}
cmdArgs = append(cmdArgs, e.formatParamValue(param, value))
// 只有当值不为 nil 时才添加到命令参数中
if value != nil {
cmdArgs = append(cmdArgs, e.formatParamValue(param, value))
}
break
}
}
// 如果某个位置没有找到对应的参数,继续处理下一个位置
// 这样可以确保位置参数的顺序正确
}
// 特殊处理additional_args 参数(需要按空格分割成多个参数)
@@ -1203,45 +1217,3 @@ func (e *Executor) convertToOpenAIType(configType string) string {
return configType
}
}
// Vulnerability 漏洞信息
type Vulnerability struct {
ID string `json:"id"`
Type string `json:"type"`
Severity string `json:"severity"` // low, medium, high, critical
Title string `json:"title"`
Description string `json:"description"`
Target string `json:"target"`
FoundAt time.Time `json:"foundAt"`
Details string `json:"details"`
}
// AnalyzeResults 分析工具执行结果,提取漏洞信息
// 注意:硬编码的漏洞解析逻辑已移除,此函数现在返回空数组
// 漏洞检测应该由工具本身或专门的漏洞扫描工具来完成
func (e *Executor) AnalyzeResults(toolName string, result *mcp.ToolResult) []Vulnerability {
// 不再进行硬编码的漏洞解析
// 漏洞检测应该由工具本身如sqlmap、nmap等的输出结果来体现
return []Vulnerability{}
}
// GetVulnerabilityReport 生成漏洞报告
func (e *Executor) GetVulnerabilityReport(vulnerabilities []Vulnerability) map[string]interface{} {
severityCount := map[string]int{
"critical": 0,
"high": 0,
"medium": 0,
"low": 0,
}
for _, vuln := range vulnerabilities {
severityCount[vuln.Severity]++
}
return map[string]interface{}{
"total": len(vulnerabilities),
"severityCount": severityCount,
"vulnerabilities": vulnerabilities,
"generatedAt": time.Now(),
}
}