File size: 3,220 Bytes
ffb6330
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from typing import List
from deepteam.plugin_system import PluginManager
from .mappings import TECHNIQUE_CLASS_MAP, SCENARIO_CLASS_MAP, METRIC_CLASS_MAP


def load_plugins_from_args(plugin_paths: List[str], plugin_manager: PluginManager) -> None:
    """从命令行参数加载插件"""
    if not plugin_paths:
        return
    
    print("正在加载自定义插件...")
    for plugin_path in plugin_paths:
        result = plugin_manager.load_plugin(plugin_path)
        if result['success']:
            print(f"✓ 成功加载插件: {plugin_path}")
            if result['warnings']:
                for warning in result['warnings']:
                    print(f"  警告: {warning}")
        else:
            print(f"✗ 加载插件失败: {plugin_path}")
            for error in result['errors']:
                print(f"  错误: {error}")


def list_plugins(plugin_manager: PluginManager) -> None:
    """列出所有可用插件"""
    print("\n=== 内置攻击插件 ===")
    for name in TECHNIQUE_CLASS_MAP.keys():
        print(f"  {name}")
    
    print("\n=== 内置漏洞场景 ===")
    for name in SCENARIO_CLASS_MAP.keys():
        print(f"  {name}")
    
    print("\n=== 内置指标 ===")
    for name in METRIC_CLASS_MAP.keys():
        print(f"  {name}")
    
    # 显示自定义插件
    custom_plugins = plugin_manager.get_loaded_plugins()
    if custom_plugins['attacks']:
        print("\n=== 自定义攻击插件 ===")
        for name in custom_plugins['attacks']:
            print(f"  {name}")
    
    if custom_plugins['vulnerabilities']:
        print("\n=== 自定义漏洞插件 ===")
        for name in custom_plugins['vulnerabilities']:
            print(f"  {name}")
    
    if custom_plugins['metrics']:
        print("\n=== 自定义指标插件 ===")
        for name in custom_plugins['metrics']:
            print(f"  {name}")


def show_plugin_template(plugin_type: str, plugin_manager: PluginManager) -> None:
    """显示插件模板"""
    template = plugin_manager.get_plugin_template(plugin_type)
    print(f"\n=== {plugin_type.title()} 插件模板 ===")
    print(template)


def validate_plugin(plugin_path: str, plugin_manager: PluginManager) -> None:
    """验证插件"""
    result = plugin_manager.validate_plugin(plugin_path)
    if result['valid']:
        print(f"✓ 插件验证通过: {plugin_path}")
        print(f"  类型: {result['plugin_type']}")
        print(f"  类名: {result['class_name']}")
        if result['warnings']:
            for warning in result['warnings']:
                print(f"  警告: {warning}")
    else:
        print(f"✗ 插件验证失败: {plugin_path}")
        for error in result['errors']:
            print(f"  错误: {error}")


def auto_discover_plugins(plugin_manager: PluginManager) -> None:
    """自动发现插件"""
    print("自动发现插件...")
    result = plugin_manager.auto_discover_plugins()
    if result['success']:
        print(f"✓ 自动发现并加载了 {len(result['loaded_plugins'])} 个插件")
        for plugin in result['loaded_plugins']:
            print(f"  - {plugin['class']} ({plugin['type']})")
    else:
        print("没有发现任何插件")