StewAlexander-com/ShadowVendor

GitHub: StewAlexander-com/ShadowVendor

将 MAC 地址表转化为交互式可视化仪表板的网络设备厂商分析工具,支持未知厂商检测、历史漂移分析和 SIEM 事件导出。

Stars: 7 | Forks: 2

# 🚀 ShadowVendor ![概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/5a/5a968fc9bd6e88187358621eb2ed26e6cffb8ef8f14958557c0b7ab541ed4349.png) **概览仪表板** - 交互式厂商分布可视化: - 将鼠标悬停在饼图扇区上可查看设备数量、百分比和 VLAN 存在情况 - 快速识别主导厂商和设备多样性 - 可直接导出用于报告和演示 ## ⚡ TL;DR:为什么您应该关注 - **将 MAC 表转化为仪表板**:将原始网络设备输出转化为交互式 HTML 可视化和 CSV 报告 - **检测新/未知厂商**:识别以前未见的设备,并跟踪厂商分布随时间的变化 - **导出 SIEM 事件**:生成用于 Elastic、Splunk 和其他 SIEM 的标准化 CSV/JSONL 导出,以实现态势变化检测 **快速开始:** `python3 ShadowVendor.py input_file.txt` → 检查 `output/` 中的结果 **60 秒内试用:** `python3 ShadowVendor.py tests/data/test-mac-table.txt`(然后在浏览器中打开 `output/vendor_distribution.html`)→ 无需触碰您自己的网络数据即可查看仪表板 **隐私与本地执行:** ShadowVendor 完全在您的机器上处理您的文件。输入文件和完整的 MAC 地址永远不会被上传。在默认模式下,未缓存的厂商查询仅向外部 API 发送 OUI 前缀(前 3 个八位字节)。使用 `--offline` 可实现完全的气隙隔离运行,零外部网络调用。 ## 👥 适用人群? - **SOC 分析师**:检测新厂商并跟踪设备变化,用于安全监控 - **网络工程师**:分析 MAC 地址表和 ARP 数据以了解网络构成 - **资产/CMDB 所有者**:通过厂商识别维护准确的设备清单 - **安全架构师**:将态势变化检测集成到 SIEM 工作流中 ## 📖 介绍 **ShadowVendor** 是一款 Python 工具,专为网络管理员和网络安全专业人员设计,用于分析和可视化网络上设备的厂商分布。它可以处理来自各种网络设备(包括 Cisco、HP/Aruba、Juniper、Extreme、Brocade 等)的 MAC 地址表和 ARP 数据,为您提供有关网络组成的详细洞察。 **在您的机器上运行:** ShadowVendor 不是一项云服务——您的网络导出文件和完整的 MAC 地址均在本地处理,从不上传;使用 `--offline` 可实现零外部网络调用。 当与 SIEM(Elastic、Splunk、QRadar 等)集成时,ShadowVendor 会从一个静态清单工具转变为一个**态势变化传感器**,从而实现主动的安全监控和事件响应。 ## 📚 文档概览 ShadowVendor 包含全面的文档,按受众和用例进行分类。本 README 提供了快速入门所需的基本信息。如需深入了解,请参阅专门的文档: | 文档 | 目的 | 最适合 | |----------|---------|----------| | **[README.md](README.md)**(您在此处) | 快速开始、常见工作流、基本用法 | 初次使用者、快速参考 | | **[TUTORIAL.md](TUTORIAL.md)** | 技术深入探讨、架构、代码解读 | 贡献者、开发者、了解内部原理 | | **[ADVANCED.md](ADVANCED.md)** | 运维最佳实践、SIEM 集成、生产部署 | SOC 工程师、网络运维、生产环境用户 | | **[CONFIG.md](CONFIG.md)** | 配置文件、环境变量、自动化设置 | 自动化工程师、DevOps、周期性任务 | | **[EXECUTION_PATHS.md](EXECUTION_PATHS.md)** | 完整的执行路径文档、行为图 | 测试人员、QA、了解所有执行模式 | | **[TEST_COVERAGE.md](TEST_COVERAGE.md)** | 测试覆盖率详情、测试策略 | 贡献者、QA 工程师 | **导航指南:** - **初次使用 ShadowVendor?** → 从这里(README.md)开始,然后尝试 [快速开始](#-getting-started) - **想了解它是如何工作的?** → 阅读 [TUTORIAL.md](TUTORIAL.md) 了解架构和代码解读 - **要部署到生产环境?** → 请参阅 [ADVANCED.md](ADVANCED.md) 了解运维最佳实践 - **正在设置自动化?** → 请查看 [CONFIG.md](CONFIG.md) 获取配置示例 - **想要贡献代码?** → 请查阅 [TUTORIAL.md](TUTORIAL.md#for-contributors) 了解扩展点和测试 ## 📑 目录 - [✨ 功能](#-features) - [🔄 常见工作流](#-common-workflows) - [🚀 入门指南](#-getting-started) - [前置条件](#prerequisites) - [安装说明](#installation) - [📋 快速参考](#-quick-reference) - [运行 ShadowVendor 的方式](#ways-to-run-shadowvendor) - [预期输出](#expected-outputs) - [📋 详细用法](#-detailed-usage) - [命令行参数](#command-line-flags) - [离线模式](#offline-mode) - [历史漂移分析](#historical-drift-analysis) - [SIEM 友好导出](#siem-friendly-export) - [Windows 用法](#windows-usage) - [详细输出](#verbose-output) - [运行时日志](#runtime-logging) - [配置](#configuration) - [Python API](#python-api) - [📥 支持的输入格式](#-supported-input-formats) - [📊 输出详情](#-output-details) - [🌟 成功案例与已知部署](#-success-stories--known-deployments) - [🔒 安全注意事项](#-security-considerations) - [🔧 高级主题](#-advanced-topics) - [技术教程](#technical-tutorial) - [🧪 测试与质量](#-testing--quality) - [📈 项目状态](#-project-status) - [🤝 社区](#-community) ## ✨ 功能 - **多厂商 MAC 地址解析:** 支持 Cisco、HP/Aruba、Juniper、Extreme、Brocade 等。 - **灵活的输入:** 接受各种格式的 MAC 地址列表、MAC 表和 ARP 表。 - **厂商识别:** 使用本地 IEEE OUI 缓存进行快速、安全的查询。 - **全面的报告:** 生成 CSV、摘要和交互式 HTML 仪表板。 - **VLAN 和端口分析:** 提取并可视化可用的 VLAN 和端口数据。 - **历史漂移跟踪:** 归档厂商摘要,并通过元数据关联分析随时间变化的趋势。 - **SIEM 集成:** 导出标准化的 CSV/JSONL 事件,用于安全监控和态势变化检测。 - **可扩展且稳健:** 轻松添加对新格式的支持;并使用真实数据进行了全面测试。 ## 🔄 常见工作流 **基础分析:** ``` python3 ShadowVendor.py input_file.txt ``` → 生成标准输出:设备 CSV、端口 CSV(如果是 MAC 表)、HTML 仪表板、厂商摘要 **离线分析(气隙隔离网络):** ``` python3 ShadowVendor.py --offline input_file.txt ``` → 仅使用本地 OUI 缓存,不进行任何外部 API 调用 **SIEM 集成:** ``` python3 ShadowVendor.py \ --siem-export \ --site DC1 \ --environment prod \ input_file.txt ``` → 生成标准输出 + SIEM 就绪的 CSV/JSONL 文件 **带有漂移分析的历史跟踪:** ``` python3 ShadowVendor.py \ --history-dir history \ --site DC1 \ --change-ticket CHG-12345 \ --analyze-drift \ input_file.txt ``` → 生成标准输出 + 带有元数据的归档摘要 + 创建漂移分析 CSV **完整工作流(所有功能):** ``` python3 ShadowVendor.py \ --offline \ --history-dir history \ --analyze-drift \ --siem-export \ --site DC1 \ --environment prod \ --change-ticket CHG-12345 \ input_file.txt ``` → 离线运行,生成所有输出,带元数据归档,创建漂移分析,并导出 SIEM 事件 ## 🚀 入门指南 ### 前置条件 - Python 3.9 或更高版本(支持 Python 3.8+) - pip(Python 包安装器) ### 安装说明 **选项 1:作为包安装(推荐用于 Python API 使用)** ``` git clone https://github.com/StewAlexander-com/ShadowVendor.git cd ShadowVendor && pip install -e . ``` **选项 2:使用独立脚本(无需安装)** ``` git clone https://github.com/StewAlexander-com/ShadowVendor.git cd ShadowVendor pip install -r requirements.txt # Install dependencies only python3 ShadowVendor.py input_file.txt # Run directly ``` 当您运行 `pip install -e .` 或 `pip install -r requirements.txt` 时,**运行时依赖** 将被自动安装。必需的包: - `requests`(用于 OUI API 查询) - `plotly`(用于交互式 HTML 仪表板) - `tqdm`(用于进度条) - `rich`(用于增强的终端输出) **开发依赖**(用于测试和安全扫描): - 安装命令:`pip install -r requirements-dev.txt` - 包含:`pytest`、`pytest-cov` 和 `bandit`(安全扫描器) - 用于:运行测试(`pytest`)、安全扫描(`pytest --bandit`)和代码覆盖率报告 - **注意**:开发依赖对于最终用户是可选的;仅供贡献者和 CI/CD 流水线使用 ## 📋 快速参考 ### 运行 ShadowVendor 的方式 **1. 简单的包入口点**(基本用法,无参数): ``` shadowvendor input_file.txt # 或 python3 -m shadowvendor input_file.txt ``` *仅限于基本分析——不支持高级功能* **2. 独立脚本**(具有所有参数的完整功能集): ``` python3 ShadowVendor.py input_file.txt ``` **重要提示:** 要使用所有高级功能(离线模式、历史跟踪、SIEM 导出、漂移分析),请使用 `python3 ShadowVendor.py`。包入口点(`shadowvendor`)是一个简单的包装器,仅接受输入文件参数,不支持各种命令行参数。 ### 预期输出 ShadowVendor 会在 `output/` 目录中生成多个输出文件: **输出行为:** - **始终生成**:设备 CSV、交互式 HTML 仪表板、厂商摘要文本文件 - **条件生成**:端口 CSV(仅适用于 MAC 地址表,不适用于 ARP 或简单列表) - **可选**(带参数):SIEM 导出(CSV/JSONL)、历史归档、漂移分析 CSV 有关完整的文件说明,请参阅下方的 [输出详情](#-output-details)。 ### 典型的首次运行 **初次使用者的快速工作流:** 1. **将您的网络输出粘贴**到文件中(例如 `my_switch.txt`): # 从以下命令复制输出:show mac address-table # 或者:show arp # 或者:仅仅是 MAC 地址列表 2. **运行 ShadowVendor**: python3 ShadowVendor.py my_switch.txt 3. **打开结果**: - **交互式仪表板**:在浏览器中打开 `output/vendor_distribution.html` - **设备列表**:查看 `output/my_switch-Devices.csv` 获取详细的设备信息 - **摘要**:阅读 `output/vendor_summary.txt` 获取快速的厂商统计 **就是这样!** 您现在拥有了一份关于您网络数据的完整厂商分析报告。 ## 📋 详细用法 ### 命令行参数 | 参数 | 说明 | 示例 | |------|-------------|---------| | `--offline` | 禁用外部厂商查询(仅缓存) | `--offline` | | `--history-dir DIR` | 用于归档厂商摘要的目录(如果不存在则自动创建) | `--history-dir history` | | `--analyze-drift` | 对归档的摘要运行漂移分析 | `--analyze-drift` | | `--site SITE` | 用于 SIEM/漂移元数据的站点/区域标识符 | `--site DC1` | | `--environment ENV` | 用于 SIEM 导出的环境标识符 | `--environment prod` | | `--change-ticket ID` | 用于漂移关联的变更工单/事件 ID | `--change-ticket CHG-12345` | | `--siem-export` | 生成对 SIEM 友好的 CSV/JSONL 导出 | `--siem-export` | **注意**:配置文件值和环境变量可以为这些参数提供默认值。请参阅下方的 [配置](#configuration) 章节。 ### 离线模式 当您希望避免任何外部厂商查询时(例如在气隙隔离网络中),请使用 `--offline` 参数。本地 OUI 缓存中尚不存在的设备将显示为 `Unknown`。 ``` python3 ShadowVendor.py --offline input_file.txt ``` ### 历史漂移分析 跟踪厂商构成如何随时间变化,并与变更窗口/事件进行关联: ``` python3 ShadowVendor.py \ --history-dir history \ --site DC1 \ --change-ticket CHG-12345 \ --analyze-drift \ input_file.txt ``` **它的作用:** - 如果历史目录不存在,则自动创建 - 将 `vendor_summary.txt` 归档到 `history/vendor_summary-YYYYMMDD-HHMMSS.txt` - 创建配套的 `.metadata.json` 文件,包含 `run_timestamp`、`site`、`change_ticket_id` - 生成 `history/vendor_drift.csv`,包含元数据行和厂商百分比趋势 **SIEM 关联:** 漂移 CSV 的元数据支持与变更窗口和事件进行关联,辅助 8D/5-why 工作流。您可以使用 `run_timestamp` 和 `site` 将漂移数据与 SIEM 事件进行关联,并通过 `change_ticket` 关联厂商构成的转变。 ### SIEM 友好导出 为了进行 SIEM 集成(Elastic、Splunk 等),生成标准化的 CSV 和 JSONL 事件: ``` python3 ShadowVendor.py \ --siem-export \ --site DC1 \ --environment prod \ input_file.txt ``` **稳定的 Schema**(每条记录中均包含所有字段): - `timestamp`、`site`、`environment`、`mac`、`vendor`、`device_name`、`vlan`、`interface`、`input_type`、`source_file` **便于关联的设计:** - 所有字段命名一致,且在每条记录中均存在 - MAC 地址经过标准化处理,确保可靠的关联 - UTC ISO-8601 时间戳,用于基于时间的关联 - 站点和环境标签支持多站点/多环境仪表板 **如需完整的 SIEM 集成:** 请参阅 [ADVANCED.md](ADVANCED.md#-posture-change-detection--security-monitoring) 了解: - 详细的 SIEM 集成工作流 - 关联规则示例(Elastic、Splunk) - 态势变化检测策略 - 持续监控设置 ### 跨平台兼容性 ShadowVendor 设计用于在 **Linux (Debian/Ubuntu)、macOS (Intel 和 Apple Silicon) 以及 Windows** 上运行。所有文件操作均使用 UTF-8 编码和跨平台路径处理,确保在各环境中无缝运行。 **Windows 用法:** ``` $env:PYTHONIOENCODING="utf-8"; $env:PYTHONUTF8="1"; python3 ShadowVendor.py input_file.txt ``` 或单独设置环境变量: ``` $env:PYTHONIOENCODING = "utf-8" $env:PYTHONUTF8 = "1" python3 ShadowVendor.py input_file.txt ``` **Linux/macOS 用法:** ``` python3 ShadowVendor.py input_file.txt ``` **跨平台注意事项:** - **文件路径**:所有路径均使用 `pathlib.Path` 以实现跨平台兼容性(自动处理 `/` 与 `\`) - **文件编码**:所有文件操作均显式使用 UTF-8 编码,以防止 Windows 上出现编码问题 - **换行符**:Python 的文本模式会自动处理 CRLF (Windows) 和 LF (Unix) - **文件锁定**:缓存写入使用原子操作(先写入临时文件,再重命名),以防止多个进程同时运行时发生损坏 - **API 超时**:所有网络请求都有 5 秒的超时时间,防止在缓慢/不可靠的网络上挂起 - **错误处理**:所有平台上的权限错误和文件系统错误均会被优雅地处理 ### 详细输出 使用 `SHADOWVENDOR_VERBOSE` 环境变量控制调试输出(仅由 `ShadowVendor.py` 支持): ``` # Quiet mode(默认) python3 ShadowVendor.py input_file.txt # Verbose mode - 详细的处理信息 SHADOWVENDOR_VERBOSE=1 python3 ShadowVendor.py input_file.txt ``` 启用详细模式后,您将看到文件类型检测细节、逐行处理信息、示例设备条目、CSV 写入进度以及输出文件内容预览。 ### 运行时日志 为了进行故障排除和性能分析,ShadowVendor 可以将运行时行为记录到结构化的日志文件中: ``` # 启用 runtime logging SHADOWVENDOR_LOG=1 python3 ShadowVendor.py input_file.txt ``` 启用后,系统将创建一个 JSONL 格式的日志文件(每行一个 JSON 对象),位置在 `output/shadowvendor_runtime.log`。每个条目包含: - `timestamp`:UTC ISO-8601 时间戳 - `event_type`:事件类型(例如 "processing_start"、"file_type_detection"、"error") - `event_data`:特定于事件的数据 - `context`:附加上下文信息 该日志记录器会捕获关键的运行时事件,包括文件处理、错误条件、输出生成和性能指标。日志默认禁用,未启用时不会对性能产生影响。 ### 配置 ShadowVendor 支持配置文件和环境变量,以减少周期性任务中 CLI 参数的重复输入。 **配置文件位置**(按顺序检查): 1. 当前目录:`./shadowvendor.conf`(或 `.yaml`、`.toml`) 2. 用户配置:`~/.config/shadowvendor/shadowvendor.conf` 3. 系统配置:`/etc/shadowvendor/shadowvendor.conf` **支持的格式**:INI/ConfigParser(`.conf`、`.ini`)、YAML(`.yaml`、`.yml` - 需要 PyYAML)、TOML(`.toml` - 需要 tomli/tomllib) **配置示例**(`shadowvendor.conf`): ``` [shadowvendor] offline = true history_dir = /var/lib/shadowvendor/history site = DC1 environment = prod siem_export = true ``` **优先级**:命令行参数 > 环境变量 > 配置文件 > 默认值 **如需了解完整的配置详情:** 请参阅 [CONFIG.md](CONFIG.md) 了解: - 完整的配置文件示例(INI、YAML、TOML) - 环境变量参考 - 配置优先级规则 - 自动化设置示例 ### Python API ShadowVendor 提供了可编程的 Python API,以便集成到自动化脚本和其他工具中: ``` from shadowvendor import analyze_file # 基本用法 result = analyze_file("mac_table.txt", offline=True) print(f"Processed {result['device_count']} devices") print(f"Found {result['vendor_count']} unique vendors") print(f"Output files: {result['output_files']}") # 访问设备数据 for mac, info in result['devices'].items(): print(f"{mac}: {info['vendor']} (VLAN: {info['vlan']})") # 使用 SIEM export result = analyze_file( input_file="mac_table.txt", offline=True, siem_export=True, site="DC1", environment="prod" ) # 使用历史记录跟踪 result = analyze_file( input_file="mac_table.txt", history_dir="history", analyze_drift_flag=True, site="DC1", change_ticket="CHG-12345" ) ``` **API 参考**:请参阅 `shadowvendor/api.py` 获取完整的函数签名和返回值文档。有关代码示例和集成模式,请参阅 [TUTORIAL.md](TUTORIAL.md#for-contributors)。 ## 📥 支持的输入格式 **只需将您原始的 `show mac address-table` 输出粘贴到文件中;ShadowVendor 会自动检测格式。** 无需繁重的数据清洗——该工具会自动处理表头、空格和不同厂商的格式。 ShadowVendor 会自动检测并解析以下格式: ### 1. 简单的 MAC 地址列表 ``` 00:11:22:33:44:55 00-11-22-33-44-55 001122334455 0011.2233.4455 ``` ### 2. MAC 地址表(多厂商) **Cisco:** ``` Vlan Mac Address Type Ports 10 0011.2233.4455 DYNAMIC Gi1/0/1 ``` **HP/Aruba:** ``` Vlan Mac Address Type Ports 20 00:24:81:44:55:66 DYNAMIC 1 ``` **Juniper:** ``` Vlan Mac Address Type Ports 30 00:0E:83:11:22:33 DYNAMIC ge-0/0/0 ``` **Extreme:** ``` Vlan Mac Address Type Ports 40 B8-AC-6F-77-88-99 DYNamic 1:1 ``` **Brocade:** ``` Vlan Mac Address Type Ports 50 00:11:22:33:44:55 DYNAMIC 1/1 ``` ### 3. ARP 表 ``` Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.1.1 - 0011.2233.4455 ARPA Vlan10 ``` **格式检测特性:** - 基于内容的自动文件类型检测 - 灵活的 MAC 解析:接受冒号、连字符、点号和掩码/前缀格式 - 从多个来源(列、接口等)提取 VLAN - 端口提取,用于详细的交换机分析 - 跳过表头和稳健的错误处理 **想了解格式检测是如何工作的?** 请参阅 [TUTORIAL.md](TUTORIAL.md#file-type-detection) 了解详细的实现,以及如何添加对新的厂商格式的支持。 ## 📊 输出详情 ### 标准输出 **在变更窗口期间使用这些仪表板,以确认没有出现意外的厂商。** ![安全仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/5a/5a968fc9bd6e88187358621eb2ed26e6cffb8ef8f14958557c0b7ab541ed4349.png) **安全仪表板** - 每个 VLAN 的设备数量分析: - 识别具有高设备密度的 VLAN 以便进行安全监控 - 发现网络分段间设备分布的异常 - 为安全审查提供快速的可视化参考 ![厂商仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/e3/e3a70e3d4194f62f29a450429579c4c9fe3a42151ecec04176e70d827bd4d3d9.png) **厂商仪表板** - 全面的多面板 VLAN 分析: - 设备数量、厂商多样性和热图 - 各网络分段的热门厂商分布 - 用于变更验证的跨 VLAN 厂商比较 **设备信息 CSV**(`{input_file}-Devices.csv`): - 每个设备一行,包含列:MAC、Vendor、VLAN、Port - 始终生成 **端口报告 CSV**(`{input_file}-Ports.csv`): - 端口利用率和设备映射 - 列:Port、Total Devices、VLANs、Vendors、Device Details - 仅针对 MAC 地址表生成(不适用于 ARP 或简单列表) **厂商分布 HTML**(`vendor_distribution.html`): - 带有厂商分布饼图和 VLAN 分析子图的交互式仪表板 - 始终生成 **厂商摘要文本**(`vendor_summary.txt`): - 带有格式化表格的厂商数量和百分比的纯文本摘要 - 始终生成 ### 可选输出 **SIEM 导出文件**(需要 `--siem-export`,写入 `output/siem/` 目录): - `siem/shadowvendor_siem.csv`:带表头的行分隔 CSV 文件 - `siem/shadowvendor_siem.json`:JSONL 格式(每行一个 JSON 对象) - 两者包含相同的数据,具有用于 SIEM 关联的稳定 schema **历史归档文件**(需要 `--history-dir`): - `vendor_summary-YYYYMMDD-HHMMSS.txt`:带有时间戳的厂商摘要快照 - `vendor_summary-YYYYMMDD-HHMMSS.metadata.json`:配套的元数据文件,包含: - `run_timestamp`:UTC ISO-8601 时间戳 - `site`:站点/区域标识符 - `change_ticket_id`:变更工单/事件 ID **漂移分析 CSV**(需要 `--analyze-drift`): - `history/vendor_drift.csv`:跨越所有归档运行的厂商百分比趋势 - 顶部包含元数据行:`run_timestamp`、`site`、`change_ticket_id` - 厂商百分比行展示了随时间的变化 ## 🌟 成功案例与已知部署 ShadowVendor 被用于生产环境进行网络监控、安全态势跟踪和资产管理。虽然具体的部署细节保密,但该工具已成功部署于: - **企业 SOC 环境**:与 Elastic Stack 和 Splunk 集成,用于跨多个数据中心的持续态势变化检测 - **网络运营团队**:每日分析来自 Cisco、Juniper 和 Aruba 交换机的 MAC 地址表,以跟踪设备清单和厂商分布 - **气隙隔离网络**:离线模式在孤立的环境中实现了厂商识别,而无需依赖外部 API - **变更管理工作流**:带有变更工单关联的历史漂移分析可辅助事件响应和根因分析 **有想要分享的成功案例吗?** 我们很乐意听到您如何使用 ShadowVendor!请参阅 [社区部分](#-community) 了解如何贡献您的成功案例。 ## 🔒 安全注意事项 ShadowVendor 在设计时充分考虑了安全性: - **只读操作**:ShadowVendor 仅读取文本导出文件,不会对网络设备进行任何更改 - **本地优先处理**:输入文件和完整的 MAC 地址永远不会离开您的机器 - **默认模式**:未缓存的厂商查询仅向外部 API 发送 OUI 前缀(前 3 个八位字节);所有其他处理均在本地进行 - **离线模式**:`--offline` 参数支持零外部网络调用的气隙隔离分析 - **对生产环境安全**:无设备修改,不存储凭据,无持久连接 - **HTML 仪表板**:打开生成的 HTML 可能会在您的浏览器中从 CDN 加载 Plotly - **代码安全扫描**:使用 Bandit 进行定期安全扫描,以检测潜在的漏洞和代码执行风险 对于正在评估该工具的安全团队:ShadowVendor 处理静态文本文件并在本地生成报告。它不会连接到网络设备或修改配置。如需了解完整的网络和 API 行为详情,请参阅 [ADVANCED.md — 网络与 API 行为](ADVANCED.md#network--api-behavior)。要报告 ShadowVendor 中的漏洞,请参阅 [SECURITY.md](SECURITY.md)。 ## 🔧 高级主题 ### 运维指南 有关高级主题和生产部署的详细信息,请参阅 **[ADVANCED.md](ADVANCED.md)**: - **态势变化检测与安全监控**:SIEM 集成工作流、关联规则和持续监控策略 - **运维最佳实践**:厂商查询优化、缓存管理、输出组织、故障排除和跨平台注意事项 - **运行时注意事项**:性能基准、网络行为、磁盘空间规划和错误处理细节 ### 技术深入探讨 **想了解 ShadowVendor 的底层工作原理?** 请参阅 **[TUTORIAL.md](TUTORIAL.md)** 获取全面的技术深入探讨,涵盖: - **架构概览**:模块化设计、组件关系、数据流 - **执行流程**:从代码执行到输出生成的逐步解读 - **核心组件**:文件类型检测、MAC 标准化、厂商查询系统、OUI 缓存管理 - **面向贡献者**:扩展点、添加新格式、测试策略、调试指南 **非常适合:** - 想要修改或扩展 ShadowVendor 的开发者 - 需要了解生产环境中行为的工程师 - 希望添加新功能或格式的贡献者 ## 🧪 测试与质量 **TL;DR**:全面的测试套件(41+ 个测试),涵盖所有执行路径、输入格式和功能。运行 `pytest -q` 进行快速验证。详情请参阅 [EXECUTION_PATHS.md](EXECUTION_PATHS.md) 和 [TEST_COVERAGE.md](TEST_COVERAGE.md)。 ShadowVendor 包含一个全面的测试套件,可验证所有执行路径、输入格式和功能,以确保可靠性和正确性。测试套件使用真实的网络设备输出和模拟数据进行可重现的验证。 ### 运行测试 **快速测试运行:** ``` pytest -q ``` **详细的测试输出:** ``` pytest -v ``` **运行特定的测试类别:** ``` # 测试所有执行路径(package entry、standalone script、Python API) pytest tests/test_execution_paths.py -v # 测试核心解析和格式检测 pytest tests/test_shadowvendor.py -v # 测试厂商查找和 caching pytest tests/test_oui_manager.py -v # 测试输出生成 pytest tests/test_vendor_output_handler.py -v # 测试 Python API pytest tests/test_api.py -v ``` **运行带有覆盖率报告的测试:** ``` pytest --cov=shadowvendor --cov-report=html ``` ### 测试覆盖率 **覆盖率摘要**:41+ 个测试,涵盖执行路径、配置、输入处理和错误处理。`tests/data/` 中的测试数据包含真实的 MAC 表、ARP 表和 MAC 列表。 **已测试内容:** - ✅ 执行路径(包入口、脚本、Python API) - ✅ 配置文件(INI、YAML、TOML)和环境变量 - ✅ 输入处理(MAC 列表、MAC 表、ARP 表) - ✅ 错误处理(缺失文件、空文件、无效输入) - ✅ 核心功能(解析、标准化、厂商查询) - ✅ 输出生成(CSV、HTML、端口报告) **详细的测试文档:** - **[EXECUTION_PATHS.md](EXECUTION_PATHS.md)** - 完整的执行路径文档 - **[TEST_COVERAGE.md](TEST_COVERAGE.md)** - 详细的测试覆盖率摘要 - **[TUTORIAL.md](TUTORIAL.md#test-strategy)** - 测试策略和调试指南 ### 安全扫描 **Bandit** 是一个安全 linter,用于扫描 Python 代码以查找常见的安全漏洞。它作为开发依赖包含在内,可以作为测试套件的一部分运行。 **安装:** ``` # 安装开发依赖项(包含 bandit、pytest、pytest-cov) pip install -r requirements-dev.txt ``` **将 Bandit 安全扫描器作为测试套件的一部分运行:** ``` # 运行所有测试并执行安全扫描 pytest --bandit # 运行特定测试并执行安全扫描 pytest tests/test_api.py --bandit -v ``` **Bandit 检查内容:** - SQL 注入漏洞 - 命令注入风险 - 不安全的加密函数使用 - 硬编码的密码和密钥 - 不安全的随机数生成 - 代码执行漏洞 - 以及其他安全反模式 **当前状态**:✅ 未发现安全问题(对有意设计的模式配置了排除项) **注意**:`--bandit` 参数会在执行测试之前运行安全扫描。如果发现安全问题,测试套件将在运行任何测试之前失败。Bandit 是一个**开发依赖**,正常的 ShadowVendor 使用不需要它。 ### 可选的 Linting/类型检查 如果在本地进行了配置: ``` ruff check . mypy shadowvendor ``` ## 📈 项目状态 **TL;DR**:积极维护,生产就绪。最新版本:[v14.0.0](https://github.com/StewAlexander-com/ShadowVendor/releases/tag/v14.0.0),完成全面的品牌重塑、全面的测试和增强的文档。自 v14.0.0 起 API 和 CLI 保持稳定。 ![ShadowVendor v14.0.0](https://static.pigsec.cn/wp-content/uploads/repos/cas/ca/caa415e564d4454c82992e9414027305a5b2f5fdb1bd9137f4b438a16a133ba2.png) ShadowVendor 展示了全面的软件工程实践,包括测试驱动开发(41+ 个测试)、详尽的技术文档、注重安全的设计(离线模式、只读操作)以及生产就绪的功能(SIEM 集成、历史漂移分析、跨平台兼容性)。 ### 最新版本:v14.0.0 **主要版本:项目更名为 ShadowVendor** **主要亮点:** - 🎉 从 NetVendor 彻底更名为 ShadowVendor - ✅ 全面的测试套件(41+ 个涵盖所有执行路径的测试) - 📚 增强的文档(TUTORIAL.md、ADVANCED.md、EXECUTION_PATHS.md、TEST_COVERAGE.md) - 🐍 用于可编程使用的 Python API - ⚙️ 配置文件支持(INI、YAML、TOML) - 🧪 包含测试数据以用于快速入门示例 **近期的改进:** - 增强了 MAC 地址解析(Juniper、Aruba、Extreme、Brocade) - 带有元数据关联的历史漂移分析 - 带有用于态势变化检测的稳定 schema 的 SIEM 导出 - 用于故障排除和性能分析的运行时日志 - 支持气隙隔离网络的离线模式 ### 版本控制与稳定性 - **SIEM schema**:自 v14.0.0 起稳定 - **核心 CLI 参数**:自 v14.0.0 起稳定(向后兼容) - **Python API**:自 v14.0.0 起稳定 ### 计划中的功能 - 更多的厂商格式支持 - 额外的可视化选项 - 网络拓扑映射 - GitHub Discussions 和社区聊天频道 ## 🤝 社区 ShadowVendor 是一个开源项目,我们欢迎社区的贡献! ### 获取帮助与报告问题 - **报告 Bug 或请求功能**:在 [GitHub 上开启一个 issue](https://github.com/StewAlexander-com/ShadowVendor/issues) - **提问**:对于一般性问题和使用案例,开启一个带有 "question" 标签的 GitHub issue - **安全漏洞**:请参阅 [SECURITY.md](SECURITY.md) —— 通过 [GitHub Security Advisories](https://github.com/StewAlexander-com/ShadowVendor/security/advisories/new) 私密报告 ### 贡献成功案例 我们很乐意听到您如何使用 ShadowVendor!通过以下方式分享您的成功案例: - 开启一个包含您的用例的 GitHub issue(根据需要进行匿名化处理) - 提交一个 pull request,将您的部署添加到 [成功案例部分](#-success-stories--known-deployments) - 在 issue 帖子中分享您的经验 ### 贡献代码 欢迎做出贡献!若要贡献代码: 1. Fork 该仓库 2. 创建一个功能分支 3. 进行您的更改 4. 如果适用,添加测试 5. 提交一个带有清晰描述您所做更改的 pull request ### 社区渠道 - **GitHub Discussions**:请参阅 [计划中](#-project-status) 部分了解即将推出的社区功能 - **社区聊天**:请参阅 [计划中](#-project-status) 部分了解即将推出的社区功能 ## 📄 许可证 本项目基于 [MIT 许可证](LICENSE) 授权。 ## 👤 作者 Stewart Alexander ## 🗺️ 快速导航 **浏览文档的常见路径:** 1. **初次使用用户工作流:** - 从这里开始(README.md) → [入门指南](#-getting-started) → [快速参考](#-quick-reference) → 尝试使用! 2. **生产环境部署工作流:** - README.md → [高级主题](#-advanced-topics) → [ADVANCED.md](ADVANCED.md) → [CONFIG.md](CONFIG.md) 3. **了解内部原理工作流:** - README.md → [高级主题](#-advanced-topics) → [TUTORIAL.md](TUTORIAL.md) → [工作原理](TUTORIAL.md#how-it-works) 4. **贡献代码工作流:** - README.md → [TUTORIAL.md](TUTORIAL.md#for-contributors) → [扩展点](TUTORIAL.md#extension-points) → [测试策略](TUTORIAL.md#test-strategy) 5. **故障排除工作流:** - README.md → [TUTORIAL.md](TUTORIAL.md#troubleshooting) → [调试指南](TUTORIAL.md#debugging-playbook) → [ADVANCED.md](ADVANCED.md#-operational-best-practices) **💡 提示:** 为了获得最佳效果,请始终使用最新的 OUI 缓存并保持依赖项最新。并记住:当您知道网络上有什么设备时,网络会变得更有趣!😄
标签:Docker 部署, Mutation, Python, Ubuntu, 代码示例, 可视化, 域名侦查, 安全规则引擎, 数据分析, 无后门, 网络运维, 逆向工具