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("没有发现任何插件") |