AurevLan/NetLanVentory

GitHub: AurevLan/NetLanVentory

NetLanVentory 是一个集网络资产发现、多引擎漏洞扫描、CVE 跟踪与合规评估于一体的开源网络清单与安全监控平台。

Stars: 0 | Forks: 0

# NetLanVentory [![最新发布](https://img.shields.io/github/v/release/AurevLan/NetLanVentory)](https://github.com/AurevLan/NetLanVentory/releases) [![CI](https://img.shields.io/github/actions/workflow/status/AurevLan/NetLanVentory/ci.yml?branch=main&label=CI)](https://github.com/AurevLan/NetLanVentory/actions) [![测试](https://img.shields.io/badge/tests-571%20(564%20passed)-brightgreen)](tests/) [![Python](https://img.shields.io/badge/python-3.11%2B-blue)](https://python.org) [![许可证](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Docker](https://img.shields.io/badge/docker-ready-2496ED?logo=docker&logoColor=white)](docker-compose.yml) [![安全](https://img.shields.io/badge/security-ANSSI%20%7C%20OWASP-critical)](SECURITY.md) **为什么选择 NetLanVentory?** - **多合一** — ARP 发现、端口扫描、DAST (ZAP)、SAST (Nuclei)、SSH CVE 审计、Docker 镜像扫描、SSL/TLS 分析 (testssl.sh)、SSH 配置审计 (ssh-audit)、默认凭据测试以及 HTTP 标头审计集成于单一平台 - **零配置扫描** — 自动检测开放端口和服务,自动构建扫描目标 - **合规就绪** — 内置 ISO 27001、NIS2 和 ANSSI 框架评估 - **安全第一** — 符合 ANSSI 的密码策略、CSP nonce、HSTS、非 root Docker、加密凭据存储 - **全面容器化** — 单个 `docker compose up` 即可部署一切 (PostgreSQL, ZAP, Nuclei, Trivy, testssl.sh) ## 截图 | 登录 | 资产列表 | |-------|-----------| | ![登录](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7c871591d6180013.png) | ![资产](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d01148c4be180019.png) | | 资产 — 详情标签页 | 资产 — 端口标签页 | |--------------------|------------------| | ![详情](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/4e20a1454a180025.png) | ![端口](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/eed9e12e91180032.png) | | 资产 — 概览 (CVE 直方图) | 资产 — 安全标签页 (DAST + SSH CVE) | |----------------------------------|--------------------------------------| | ![概览](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/afbcad8d20180036.png) | ![安全](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/9b6266bdb6180043.png) | | 扫描 | 模块 | |-------|---------| | ![扫描](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/3f5d9216c8180049.png) | ![模块](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f33847e7df180056.png) | | 管理 — 用户 | 管理 — ZAP 自动扫描 | |--------------|----------------------| | ![管理](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e8bc35de62180102.png) | ![ZAP 自动扫描](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2a1c7ef862180108.png) | ## 功能 ### 网络发现与扫描 - **ARP 扫描** — 通过 scapy 进行二层主机发现,并带有异步 ICMP ping 回退 - **端口扫描器** — 由 nmap 驱动的 TCP SYN/connect 扫描 - **服务检测器** — 异步 banner grabbing + nmap `-sV` 版本检测 - **OS 指纹识别** — nmap `-O` 以及基于开放端口的启发式回退 - **模块化架构** — 只需在 `netlanventory/modules/` 中放入单个文件即可添加新的扫描器 ### 资产管理 - **可编辑资产字段** — 主机名、OS 系列/版本、设备类型,可直接在仪表盘中编辑,并带有基于数据库现有值不断更新的自动补全建议 (``) - **DNS 关联** — 为每个资产附加多个 FQDN/DNS 名称;这些名称将作为附加扫描目标被 ZAP 扫描使用 ### ZAP Web 漏洞扫描 - **按需 ZAP 扫描** — 直接从仪表盘对任何资产触发 ZAP spider + active scan - **CVE 跟踪** — 每个 ZAP 报告都会统计警报中发现的 CVE;按每次扫描进行跟踪 - **CVE 演变直方图** — 资产模态框中的概览标签页显示混合 Chart.js 图表:堆叠柱状图(高/中/低/信息警报)+ 每次扫描的紫色折线图(CVE 数量),并带有右侧 Y 轴;单次扫描视图显示传统的水平条形图 - **ZAP 自动扫描调度器** — 服务端 asyncio 循环(每 60 秒检查一次)自动对所有开放了 Web 端口 (80, 443, 8080, 8443, 8000, 3000, 4443) 的活跃资产触发 ZAP 扫描;扫描目标包括资产 IP **以及所有关联的 DNS 名称** ### ZAP 自动扫描设置 - **全局主开关** — 从管理面板 → *ZAP 自动扫描* 标签页启用/禁用自动扫描并设置默认间隔(分钟) - **单资产覆盖** — 每个资产都可以单独启用/禁用自动扫描并覆盖全局间隔;资产上的 `NULL` 表示“使用全局值” - **目标可见性** — 资产详情标签页显示所有计算出的扫描目标(IP × DNS 名称 × Web 端口)以及到下次计划扫描的倒计时 ### Nuclei 多协议扫描 - **自动目标检测** — 扫描目标根据资产开放的端口和服务自动确定;无需手动输入 URL - HTTP/HTTPS 端口 → Web 扫描目标(IP + 所有关联的 FQDN,用于虚拟主机模板) - 端口 53 → DNS 解析器扫描 - FTP, SMTP, SMB, MySQL, PostgreSQL, Redis, MongoDB, RDP → 特定服务模板 - **模板标签** — 选择 Nuclei 模板标签以匹配检测到的服务(例如 `http`, `smb`, `dns`);始终包含 `cve`, `misconfig`, `exposure` - **多源 CVE 去重** — 由 ZAP 和 Nuclei 同时发现的 CVE 在 CVE 表中显示为单行,来源显示为 `zap + nuclei` - **内置二进制文件** — Nuclei 二进制文件在构建时被复制到 Docker 镜像中 (`projectdiscovery/nuclei:latest`);模板持久化存储在命名的 Docker volume 中,以避免重启时重新下载 - **结果** — 发现结果存储为 `NucleiReport`,包含 JSONL 输出、风险摘要(严重/高/中/低/信息)和 CVE 计数 ### SSH CVE 扫描 - **加密凭据** — 为每个资产存储密码 **或** PEM 私钥;值在静态存储时通过 Fernet 加密(密钥派生自 `SECRET_KEY`),且永远不会以纯文本形式返回 - **包审计** — 通过 asyncssh 连接,检测 Linux 发行版,并列出已安装的软件包(Debian/Ubuntu `dpkg`,RHEL/CentOS `rpm`,Alpine `apk`) - **CVE 查找** — OSV.dev(主要,无需密钥,每次请求批量 1 000 个包)+ NVD NIST(后备,需要 `NVD_API_KEY`) - **结果** — CVE 持久化为带有 `source="ssh"` 的 `AssetCve` 行,与 ZAP 和 Nuclei 的发现结果一起显示在统一的 CVE 表中 ### CVE 库 - **跨资产 CVE 视图** — 侧边栏导航面板,列出整个资产群中所有已知的 CVE,具有严重性过滤器(严重 / 高 / 中 / 低 / 未知)和自由文本搜索 - **非标准公告 ID** — 完全支持 `UBUNTU-CVE-*`、`USN-*` 和 `GHSA-*` ID;每个 ID 链接到其规范的上游公告来源(NVD、ubuntu.com、GitHub Security Advisories、OSV.dev) - **修复版本跟踪** — `asset_cves` 中的 `fixed_version` 列记录了修复每个 CVE 的版本;在仪表盘中显示为 "Version corrigée" 列 - **按需丰富** — "Enrichir" 按钮通过 OSV.dev 和 NVD 触发全局后台丰富过程,适用于任何仍然缺少 CVSS 分数或描述的 CVE - **CVE 详情视图** — `GET /api/v1/cves/{id}` 返回 CVSS 分数、严重性、描述、发布日期以及受影响资产的完整列表 ### Vision 360° RSSI - **高管仪表盘** — 风险评分表盘、MTTR、速率(每周 CVE 数量)、燃尽图、30 天趋势、严重性 × 关键性热图、修复漏斗、覆盖率条形图、SLA 指标、归零预测 - **修复工作流** — 跟踪 CVE 生命周期(打开 → 已计划 → 进行中 → 已解决 | 已阻塞),分配给团队成员,设置到期日期,看板视图 - **KPI 快照** — 所有指标的每日自动快照,用于长期趋势分析 - **持久化 SLA** — 可按严重性配置(严重 3 天,高 7 天,中 30 天,低 90 天),存储在数据库中 - **合规性** — ISO 27001、NIS2、ANSSI 框架评估及控制评分 ### 扫描计划与自动化 - **计划重新扫描** — 可以直接从扫描标签页将任何已完成的扫描设置为按可配置间隔(每小时、6 小时、12 小时、每天、每周、每月)自动重复 - **原地重新运行** — 重新运行扫描会更新同一行,而不是创建重复项 - **内联控件** — 下拉间隔选择器 + "Planifier" 按钮,激活时显示带有下次运行倒计时的绿色徽章 - **调度器** — 每 60 秒检查一次;当间隔到期时自动触发 ZAP、SSH、Trivy 和网络重新扫描 ### 预览功能(可选开启,默认关闭) 这两个创新路线图方向特意默认不启用;套件的其余部分不依赖于它们。 - **AI 分诊** — 由本地 Ollama 或 Anthropic 模型提供针对单个 (CVE, 资产) 的紧迫性建议,具有基于 prompt 版本控制的缓存和 Redis token 预算保护。**默认禁用**(`AI_TRIAGE_ENABLED=false` → `/triage` 端点返回 `503`)。要启用,请在 `.env` 中设置 `AI_TRIAGE_*` / `OLLAMA_*` 变量(参见 `.env.example`)并运行一个提供商。建议仅供参考——它们永远不会驱动自动化。 - **智能重新扫描调度器** — 针对单个 (资产, 模块) 的优先级评分(EPSS 增量、新 KEV、年龄、未确认的严重问题)每小时计算一次,并通过 `/scheduler/priorities` 公开。**目前仅供参考**:它们帮助您了解*应该*重新扫描什么,但尚未触发扫描——上方的固定间隔调度器仍然负责触发扫描。队列连接保留在 `smart_scheduler_queue_enabled` 之后。 ### 安全与认证 - **JWT 认证** — 所有 API 端点都需要有效的 Bearer token(`/api/v1/auth/login` 除外);需要 `sub`、`exp` 和 `iss` 声明;颁发者验证为 `netlanventory` - **ANSSI R22 密码策略** — 12 个字符以上,包含大写字母、小写字母、数字、特殊字符;bcrypt 14 轮 - **基于角色的访问控制** — 用户管理和全局设置需要 `admin` 角色 - **OIDC / SSO** — 通过管理面板配置可选的 OpenID Connect 提供商 - **用户管理** — 从仪表盘创建、激活/停用和删除用户 - **HTTP 安全标头** — HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, Content-Security-Policy, Cross-Origin-Opener-Policy - **速率限制** — 登录 10 req/min,触发 ZAP 20 req/min,触发 Nuclei 10 req/min,触发 SSH 5 req/min,全局默认 200 req/min - **输入验证** — IP 地址、主机/端口正则表达式、Docker 镜像名称、FQDN 在 API 边界进行验证 - **Docker 加固** — 非 root 用户,cap_drop ALL,强制机密信息,no-new-privileges ### 基础设施 - **REST API** — FastAPI,OpenAPI 文档位于 `/docs` - **Web 仪表盘** — SOC Nightwatch 暗色主题 SPA,位于 `http://localhost:8443` - **哈希路由** — 浏览器的后退/前进按钮正常工作,URL 可共享(`/#/assets`, `/#/topology`) - **CLI** — `netlv` 命令,带有 Rich 格式化的表格和实时进度 ## 环境要求 - Docker + Docker Compose(推荐) - **或者** Python 3.11+, PostgreSQL 14+, nmap, libpcap, OWASP ZAP(用于 ZAP 功能) ## 使用 快速开始 ``` git clone https://github.com/AurevLan/NetLanVentory.git cd NetLanVentory cp .env.example .env # edit passwords / SECRET_KEY as needed docker compose up --build ``` | 服务 | URL | |---------|-----| | 仪表盘 | http://localhost:8443 | | API 文档 | http://localhost:8443/docs | | ReDoc | http://localhost:8443/redoc | ## 默认管理员账户 首次启动时,如果数据库中不存在用户,将自动创建一个默认管理员账户: | 字段 | 默认值 | |-------|---------------| | 邮箱 | `admin@localhost` | | 密码 | `changeme` | **在将应用暴露于网络之前,请更改这些信息。** 在第一次执行 `docker compose up` 之前编辑 `.env`: ``` ADMIN_EMAIL=your@email.com ADMIN_PASSWORD=a-strong-password JWT_SECRET_KEY= SECRET_KEY= # also used to derive the SSH credential encryption key ZAP_API_KEY= # leave empty to disable ZAP API key NVD_API_KEY= # optional — enables NVD fallback for SSH CVE lookup NUCLEI_RATE_LIMIT=150 # optional — Nuclei requests/s (default 150) NUCLEI_TIMEOUT=30 # optional — Nuclei per-host timeout in seconds (default 30) MAX_CONCURRENT_NUCLEI_SCANS=2 # optional — max simultaneous Nuclei scans (default 2) ``` ## 本地开发 ``` python3 -m venv .venv && source .venv/bin/activate pip install -e ".[dev]" # 启动 PostgreSQL(或将 DATABASE_URL 指向现有实例) cp .env.example .env # 运行 migrations alembic upgrade head # 启动 API server netlv serve --reload ``` ## CLI 用法 ``` # 列出可用的 scanning modules netlv modules list # 运行完整扫描(SYN scan + ARP 需要 root) sudo netlv scan run \ --target 192.168.1.0/24 \ --modules arp_sweep,port_scanner,service_detector,os_fingerprint # 浏览结果 netlv assets list netlv assets list --active-only --filter 192.168.1 # 显示主机的完整详情 netlv assets show 192.168.1.1 # 列出历史扫描 netlv scan list # 将 CLI 指向远程 API server netlv --api-url http://my-server:8000 assets list ``` ## REST API ### 资产 | 方法 | 端点 | 描述 | |--------|----------|-------------| | `GET` | `/api/v1/assets` | 列出资产 (`?active_only`, `?limit`, `?skip`) | | `GET` | `/api/v1/assets/vocabulary` | 用于自动补全的不同的 OS 系列和设备类型 | | `GET` | `/api/v1/assets/{id}` | 通过 UUID 获取资产 | | `GET` | `/api/v1/assets/by-ip/{ip}` | 通过 IP 地址获取资产 | | `POST` | `/api/v1/assets` | 手动创建资产 | | `PATCH` | `/api/v1/assets/{id}` | 更新资产字段 (hostname, os_family, os_version, device_type, ssh_password, ssh_private_key, zap_auto_scan_enabled, …) | | `DELETE` | `/api/v1/assets/{id}` | 删除资产 | ### DNS 条目 | 方法 | 端点 | 描述 | |--------|----------|-------------| | `GET` | `/api/v1/assets/{id}/dns` | 列出资产的 DNS 条目 | | `POST` | `/api/v1/assets/{id}/dns` | 添加 DNS 条目 (`{ "fqdn": "host.example.com" }`) | | `DELETE` | `/api/v1/assets/{id}/dns/{dns_id}` | 移除 DNS 条目 | ### 扫描与模块 | 方法 | 端点 | 描述 | |--------|----------|-------------| | `GET` | `/api/v1/scans` | 列出扫描 | | `POST` | `/api/v1/scans` | 启动新扫描(异步,202 Accepted) | | `GET` | `/api/v1/scans/{id}` | 获取扫描状态和结果 | | `DELETE` | `/api/v1/scans/{id}` | 删除扫描 | | `GET` | `/api/v1/modules` | 列出已注册的模块 | | `GET` | `/api/v1/modules/{name}` | 获取模块元数据 + 选项 schema | ### SSH CVE 扫描 | 方法 | 端点 | 描述 | |--------|----------|-------------| | `POST` | `/api/v1/assets/{id}/ssh-scan` | 触发 SSH 软件包审计 + CVE 查找(异步,202 Accepted) | | `GET` | `/api/v1/assets/{id}/ssh-scan` | 列出 SSH 扫描报告(最新优先) | | `GET` | `/api/v1/assets/{id}/ssh-scan/{report_id}` | 获取特定的 SSH 扫描报告 | ### Nuclei | 方法 | 端点 | 描述 | |--------|----------|-------------| | `POST` | `/api/v1/assets/{id}/nuclei` | 触发 Nuclei 扫描(目标从开放端口自动确定,异步,202 Accepted) | | `GET` | `/api/v1/assets/{id}/nuclei` | 列出资产的 Nuclei 报告(最新优先) | | `GET` | `/api/v1/assets/{id}/nuclei/{report_id}` | 获取特定的包含完整发现列表的 Nuclei 报告 | ### ZAP | 方法 | 端点 | 描述 | |--------|----------|-------------| | `POST` | `/api/v1/zap/scan` | 针对目标 URL 启动 ZAP 扫描 | | `GET` | `/api/v1/zap/reports` | 列出 ZAP 报告(支持 `?asset_id`) | | `GET` | `/api/v1/zap/reports/{id}` | 获取包含警报和 CVE 数量的完整 ZAP 报告 | | `DELETE` | `/api/v1/zap/reports/{id}` | 删除 ZAP 报告 | ### CVE 库 | 方法 | 端点 | 描述 | |--------|----------|-------------| | `GET` | `/api/v1/cves` | 列出所有 CVE (`?severity`, `?search`, `?skip`, `?limit`) | | `GET` | `/api/v1/cves/{cve_id}` | 获取包含受影响资产列表的 CVE 详情 | | `POST` | `/api/v1/cves/enrich` | 触发全局 CVE 丰富(OSV + NVD,后台执行) | ### 管理 | 方法 | 端点 | 描述 | |--------|----------|-------------| | `GET` | `/api/v1/admin/zap-settings` | 获取全局 ZAP 自动扫描设置 | | `PUT` | `/api/v1/admin/zap-settings` | 更新全局 ZAP 自动扫描设置 | | `GET` | `/api/v1/admin/oidc` | 获取 OIDC 提供商配置 | | `PUT` | `/api/v1/admin/oidc` | 更新 OIDC 提供商配置 | ### 认证与用户 | 方法 | 端点 | 描述 | |--------|----------|-------------| | `POST` | `/api/v1/auth/login` | 获取 JWT token (`application/x-www-form-urlencoded`) | | `GET` | `/api/v1/users/me` | 当前用户的个人资料 | | `GET` | `/api/v1/users` | 列出用户(仅限管理员) | | `POST` | `/api/v1/users` | 创建用户(仅限管理员) | | `PATCH` | `/api/v1/users/{id}` | 更新用户(仅限管理员) | | `DELETE` | `/api/v1/users/{id}` | 删除用户(仅限管理员) | ### 通过 API 启动扫描 ``` curl -s -X POST http://localhost:8000/api/v1/auth/login \ -d 'username=admin@localhost&password=changeme' | jq -r .access_token # → curl -X POST http://localhost:8000/api/v1/scans \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/json' \ -d '{ "target": "192.168.1.0/24", "modules": ["arp_sweep", "port_scanner", "service_detector", "os_fingerprint"] }' ``` ## ZAP 自动扫描配置 1. 打开仪表盘 → **管理** → **ZAP 自动扫描** 2. 启用全局主开关并设置默认间隔(1–10 080 分钟) 3. 对于每个需要不同时间表(或选择退出)的资产,打开资产模态框 → **详情** 标签页 → 切换 *ZAP 自动扫描* 并可选择设置单个资产的间隔 调度器每 60 秒唤醒一次,并在满足以下条件时启动扫描: - 为资产启用了自动扫描(资产开关,或者如果未设置资产开关则使用全局设置),**并且** - 自上次自动扫描以来已过了配置的间隔,**并且** - 资产至少有一个开放的 Web 端口 (80, 443, 8080, 8443, 8000, 3000, 4443) 扫描目标会自动构建:为附加到资产的每个 DNS 名称生成 `{scheme}://{ip}` + `{scheme}://{fqdn}`。 ## 添加模块 创建 `netlanventory/modules/my_module.py`: ``` from netlanventory.modules.base import BaseModule, ModuleCategory, ModuleMetadata class MyModule(BaseModule): metadata = ModuleMetadata( name="my_module", display_name="My Module", version="1.0.0", category=ModuleCategory.SERVICE, description="Does something useful.", author="You", requires_root=False, options_schema={ "type": "object", "properties": { "target": {"type": "string"}, }, "required": ["target"], }, ) async def run(self, session, options): # ... your logic here ... return { "module": self.metadata.name, "status": "success", "assets_found": 0, "details": {}, } ``` 重启服务器——该模块会被自动发现,并立即可通过 `netlv modules list` 和 API 使用。 ## 项目结构 ``` NetLanVentory/ ├── netlanventory/ │ ├── core/ # config, crypto (Fernet), cve_enrichment, async DB engine, structlog, module registry, scheduler │ ├── models/ # SQLAlchemy ORM (Asset, Scan, Port, ScanResult, AssetDns, GlobalSettings, ZapReport, SshScanReport, NucleiReport, …) │ ├── schemas/ # Pydantic request/response schemas │ ├── modules/ # BaseModule ABC + built-in scanners │ ├── api/ │ │ ├── routers/ # assets, scans, modules, zap, dns, ssh_scan, nuclei, cves, auth, users, admin │ │ └── static/ # Single-page dashboard (HTML + JS + CSS, no build step) │ └── cli/ # Click commands, Rich output helpers ├── alembic/ # Database migrations ├── tests/ # pytest-asyncio test suite (SQLite in-memory) ├── Dockerfile └── docker-compose.yml ``` ## 运行测试 ``` # 通过 Docker(推荐 — 无需本地 Python) docker compose --profile test up --build tests # 或运行完整的 recette 脚本 ./scripts/recette.sh # 仅运行快速冒烟测试 ./scripts/recette.sh --quick # 仅运行安全回归测试 ./scripts/recette.sh --security # 使用 Makefile make recette # lint + types + tests + coverage make test-security # security tests only make test-coverage # with HTML coverage report ``` 测试使用内存中的 SQLite — 不需要 PostgreSQL。跨越 37 个测试文件的 **571 个测试**涵盖: - 安全回归(CSP, HSTS, CORS, 身份验证强制执行, 输入验证, JWT, 加密) - RSSI 360° 视图(高管 KPI, 修复工作流, SLA, 合规性, 时间线) - 所有 180 多个 API 端点 (CRUD, 扫描, 管理, 合规性) - 单元测试(身份验证, 密码, 评分, 合规性, 断路器) - 集成测试(资产, CVE 丰富, 缓存) ## 技术栈 | 层 | 技术 | |-------|-----------| | 语言 | Python 3.11+ | | API 框架 | FastAPI 0.135+ / Uvicorn 0.42+ | | 数据库 | PostgreSQL 16 (asyncpg / SQLAlchemy 2.0.48+) | | 数据库迁移 | Alembic | | 网络扫描 | scapy (ARP), python-nmap (端口/服务/OS) | | Web 漏洞扫描 | OWASP ZAP (DAST) | | 多协议扫描 | ProjectDiscovery Nuclei | | Docker 镜像扫描 | Aquasec Trivy | | SSL/TLS 分析 | testssl.sh | | SSH 配置审计 | ssh-audit | | 速率限制 | slowapi | | 身份验证 | JWT (PyJWT) + bcrypt (14 rounds) | | 加密 | Fernet (AES-128-CBC + HMAC-SHA256) | | CLI | Click + Rich | | 日志记录 | structlog | | Linting | Ruff (带有 bandit 安全规则) | | 类型检查 | MyPy (严格模式) | | 测试 | pytest-asyncio (571 个测试) | | 容器 | Docker Compose (多阶段构建) | ## 更新日志 有关完整的版本历史,请参见 [更新日志](CHANGELOG.md)。 ## 许可证 MIT
标签:AI风险缓解, CTI, DAST, Docker, Python, 安全合规, 安全防御评估, 实时处理, 密码管理, 恶意软件分析, 插件系统, 搜索引擎查询, 无后门, 检测规则, 测试用例, 网络代理, 网络测绘, 网络资产发现, 请求拦截, 逆向工具