SRC 研究环境相关部署状态、验证与回滚记录。
DSH、Claude Code、Codex 部署记录#
本文仅保留 DSH、Claude Code、Codex 相关的部署、状态变化、验证与回滚记录。日期按原操作记录;当前状态摘要按 2026-09-23 同步。
最近状态摘要(截至 2026-09-23)#
| 客户端 | 最近记录状态 |
|---|---|
| DSH Desktop | recon-mcp 为主搜索源;Netlas → Quake → FOFA 为串行备用;Playwright 仅为浏览器工具;ZoomEye 已移除。 |
| Claude Code | ZoomEye 已移除,搜索顺序恢复为 Netlas → FOFA;原有技能与其他服务保留。 |
| Codex | 2026-09-21 注销本项目 Quake、Netlas、FOFA、Playwright 的 MCP 注册并归档服务目录;src-research 技能保留。 |
以上为本文件最近一次部署记录,不代表此后对客户端主目录的独立检查。
DSH:recon-mcp 统一 Gateway 主源同步(2026-09-19—2026-09-23)#
当前主备路由#
已将 /Users/feliz/Documents/recon-mcp/ 接入 DSH 激活 profile desktop 的 ~/.dsh/profiles/desktop/cordis.patch.yml。DSH 默认先调用 recon-mcp:asset_search 用于资产发现,recon 用于完整本地侦察,deep_recon 用于深度模式。
recon-mcp 内部优先读取 24 小时缓存并使用本地 subfinder → httpx → naabu → nuclei。DSH 配置中的 ENABLE_NETLAS=false、ENABLE_QUAKE=false、ENABLE_FOFA=false 保持 API 默认关闭。只有主源无结果、主源不可用或用户明确要求补充时,才调用独立 provider MCP,顺序固定为 Netlas → Quake → FOFA,不并发、不自动扩展 target。
~/.dsh/mcp-servers/netlas/、quake/、fofa/ 继续保留为备用 provider MCP。playwright 继续注册,但仅用于浏览器操作,不属于搜索源或 provider fallback。ZoomEye 不在当前活动配置中。
已同步的源文件#
.deploy/dsh/cordis.patch.yml.deploy/dsh/AGENTS.md.previewscripts/deploy_dsh.pyREADME.md目录文件分析.md部署记录.md
验证#
| 验证项 | 结果 |
|---|---|
| 活动 profile 路由 | recon-mcp → Netlas → Quake → FOFA;Playwright 单独注册。 |
| Gateway MCP 工具 | asset_search、recon、deep_recon。 |
| Gateway 构建 | npm run build 通过。 |
| Gateway 回归 | npm test 的 7 项 smoke checks 全部通过。 |
| DSH patch / 源码模板 | YAML 解析通过;部署脚本 Python 3.12 编译通过。 |
| 回滚 | 备份位于 /Users/feliz/.dsh/backups/source-sync-20260923/;独立副本回滚通过。 |
修改 profile 后需重启 DSH,运行中的 MCP 子进程不会自动重载新的 profile 或 Gateway 构建产物。
Codex:移除项目 MCP(2026-09-21)#
已从 ~/.codex/config.toml 注销本项目的 netlas、fofa、quake、playwright MCP 注册;对应四个服务目录已归档至 /Users/feliz/.codex/backups/remove-project-mcps-20260921-172152/,匹配的服务进程已停止。Codex 的 src-research 技能与项目源码未改动。
验证:活动配置中不含这四个 MCP 注册;codex mcp list 不再列出它们;归档配置与原配置哈希一致;77 个匹配进程结束后复查无残留。项目测试 python -m unittest discover -s tests -q:26 项通过。
变更字段:~/.codex/config.toml 中 [mcp_servers.netlas]、[mcp_servers.fofa]、[mcp_servers.quake]、[mcp_servers.playwright]。验证与回滚材料:.deploy/codex-tool-removal-20260921-172015/。
Quake 第二 API Key 槽位(2026-09-16)#
Quake 服务新增 QUAKE_API_KEY_BACKUP=,供服务目录自己的 .env 配置第二 Key;源代码、DSH 和 Codex 服务副本均已加入该字段。服务按主 Key、第二 Key 顺序尝试;认证/配额错误或连接失败时切换,两个 Key 均失败后按 Quake → Netlas → FOFA 顺序回退。凭据保留在各自 .env 中。
| 验证 | 结果 |
|---|---|
| Quake 单元测试 | 16 项通过,覆盖主 Key 限流后使用第二 Key、业务限流码轮换及仅配置第二 Key。 |
| 全量回归 | 26 项通过。 |
| MCP 握手 | DSH、Codex 的 initialize、工具列举、status、空查询校验通过。 |
| 回滚 | 独立副本回滚通过;修改副本保持新字段。 |
验证工件:.deploy/quake-key-20260916-132000/{MODIFIED_FILE,DIFF_FILE,VERIFICATION.txt,ROLLBACK.sh}。本次未发起真实 Quake 查询。
Quake 增量部署到 Codex(2026-09-16)#
Codex 用户级配置 ~/.codex/config.toml 新增 [mcp_servers.quake] 与 search 审批策略,服务位于 ~/.codex/mcp-servers/quake/,codex mcp list 曾确认该服务为 enabled。DSH 已先行配置 Quake,本次保持其配置不变。路由统一为 Quake → Netlas → FOFA。
验证:Codex 配置解析、Quake MCP initialize/tools/status/空查询检查通过;测试 23 项通过;独立副本回滚恢复基线字节内容,活动配置保持部署后状态。备份位于 ~/.codex/backups/quake-20260916-130214-920242/。此注册已由 2026-09-21 的 Codex MCP 移除记录取代。
DSH:Quake 第一搜索源及联调(2026-09-15—2026-09-16)#
历史记录:本节描述当时的 Quake 主源状态;当前 DSH 路由已由上方
recon-mcpGateway 主源同步记录取代。
部署与路由#
将 360 Quake 设为 DSH 第一 MCP 搜索源,Netlas 第二、FOFA 第三。服务源码为 mcp-servers/quake_MCP/quake.py,提供 search、status;DSH 服务副本位于 ~/.dsh/mcp-servers/quake/,使用独立 Python 3.12 venv,并注册在激活 profile 的 cordis.patch.yml 中(行 id mcp-src-quake)。凭据字段为 QUAKE_API_KEY,可选第二字段为 QUAKE_API_KEY_BACKUP。
工具接受 search(query, start=0, size=20, include=..., latest=true);分页使用 start 与 size。空查询、非法分页和不支持的 include 字段在本地拒绝;限流会进入冷却。回退链为 Quake → Netlas → FOFA。
验证与缺陷修复#
初始阶段完成源代码与 DSH venv 的握手、工具列举、status、空查询输入校验;回归测试 17 项通过。DSH Desktop 的激活 profile 为 desktop,新增 MCP 行写入非激活 profile 时不会被加载;将配置改至激活 profile 并重启 DSH 后已确认生效。
填入 Key 后的真实联调发现 Quake 筛选字段配置错误。修复包括:默认不发送 include;显式非法字段在本地拒绝;上游 q2001 映射为 invalid_include;将 q3005 纳入限流冷却;连接失败增加一次重试及 1 秒退避。
| 实测 | 结果 |
|---|---|
status | configured: true。 |
domain:"qianxin.com" | code=0,返回真实资产与字段。 |
分页 start=2 | 返回不同结果,next_start=4。 |
title:"管理后台" | code=0,返回结果含 body/title 字段。 |
ip:"8.8.8.8" 配合 include=ip,port,org | code=0,返回指定字段。 |
| 空查询、非法分页、非法 include | 本地拒绝,未发请求。 |
| 单元回归 | 23 项通过。 |
DSH 运行中的服务子进程不会自动重载源码;终止旧子进程后,下一次工具调用会以新代码重启。Key 的实际值不记入本文。
DSH Desktop 初始部署(2026-09-15)#
本包部署至 ~/.dsh。技能位于 ~/.dsh/skills/src-research/SKILL.md,用户级入口为 ~/.dsh/AGENTS.md。MCP 使用激活 profile 的 patch 层;最近确认的 profile 是 desktop,配置路径为 ~/.dsh/profiles/desktop/cordis.patch.yml。服务目录位于 ~/.dsh/mcp-servers/。
部署时先写入错误的非激活 profile,重启后工具未出现。检查激活 profile 后,将 MCP 行移至 desktop/cordis.patch.yml;新增 MCP 行不会可靠热加载,因此修改后需重启 DSH。scripts/deploy_dsh.py 会探测 profile,也支持 --profile 覆盖;patch 合并遇到同名但定义不一致时停止。
| 验证项 | 记录结果 |
|---|---|
| 技能 | 63 个 Markdown;12 个 rules、49 个知识库文件(含索引)。 |
| Netlas / FOFA MCP | initialize、工具列举、status 或本地输入校验通过。 |
| profile 配置 | desktop/cordis.patch.yml 解析校验通过;插件在 profile 下可解析。 |
| MCP 加载 | 重启后服务子进程加载;Netlas status 返回 configured: true。 |
| 权限 | 全局入口、profile patch 和服务 .env 均记录为 0600。 |
| 真实查询 | 初始部署验证未调用真实资产搜索;后续 Quake 联调另见上节。 |
备份:~/.dsh/backups/src-research-20260915-111048-916037/、~/.dsh/backups/src-research-20260915-113445-066524/。复验命令:
.venv/bin/python scripts/deploy_dsh.pyPY=~/.dsh/mcp-servers/fofa/.venv/bin/python$PY scripts/check_mcp.py ~/.dsh/mcp-servers/fofa/fofa.py$PY scripts/check_netlas_mcp.py ~/.dsh/mcp-servers/netlas/netlas_server.pyClaude Code:配置迁移与完整性检查(2026-09-14)#
目录与启动记录#
历史运行配置目录曾改名为备份目录;同日随后一次检查又记录原路径作为运行目录,并记载 zsh 启动函数设置 CLAUDE_CONFIG_DIR 后启动 Claude Code。之后的 Claude Code 用户级部署条目使用 ~/.claude。路径历史存在先后变化,执行维护前应以当前本机配置为准。
后续部署所用路径为:~/.claude/CLAUDE.md、~/.claude/skills/src-research/SKILL.md、~/.claude.json、~/.claude/mcp-servers/。检查记录的 Claude Code 版本为 2.1.270;指定配置目录后,FOFA、Netlas、Playwright 曾显示 Connected。
技能与 MCP 验证#
| 检查项 | 记录结果 |
|---|---|
| 研究技能 Markdown | 63 个;缺失 0、额外 0。 |
| 与迁移源比较 | 59 个 Markdown 字节一致;4 个差异为入口或标题适配。 |
| FOFA / Netlas | MCP 初始化、工具列举、输入校验通过;未消耗真实搜索配额。 |
| Playwright | 独立无头浏览器打开 about:blank、执行页面计算并关闭通过。 |
| Python | 两个 venv 使用 Python 3.12.14,pip check 通过。 |
| 凭据文件 | 两份 .env 权限记录为 0600。 |
复验命令:
CLAUDE_CONFIG_DIR="$HOME/.claude" claude mcp list.venv/bin/python scripts/check_browser_mcp.py "$HOME/.claude.json"ZoomEye 变更与清理#
2026-09-18,Claude Code 用户级服务目录 ~/.claude/mcp-servers/zoomeye/ 与 ~/.claude.json 的 mcpServers.zoomeye 曾新增。新增时的路由为 Netlas → ZoomEye → FOFA,独立 venv、空 .env 模板及技能规则同步完成;MCP 握手、status、pip check 通过,测试 35 项通过。
同日按后续变更移除 ZoomEye 注册和服务目录,清理 ZOOMEYE_FALLBACK_SOURCE 并恢复 Netlas → FOFA。其余既有服务与技能保留。备份:~/.claude/backups/remove-zoomeye-*;回滚工件:.deploy/remove-zoomeye-20260918-224623-443900/。
Codex:初始并行部署(2026-09-14)#
从既有研究技能源复制独立副本至 ~/.codex/skills/src-research/;全局入口为 ~/.codex/AGENTS.md,MCP 配置为 ~/.codex/config.toml。初始部署包括 Netlas、FOFA、Playwright;2026-09-16 增量加入 Quake。此后 2026-09-21 已按本文件开头的记录注销这四个项目 MCP,技能副本仍保留。
初始部署验证:技能格式检查通过;10 项离线回归通过;Netlas、FOFA MCP initialize、工具列举和本地参数校验通过;Playwright MCP 初始化及独立无头浏览器打开页面、执行计算、关闭均通过。初始备份:~/.codex/backups/src-research-20260914-152619-967851/。
部署脚本:scripts/deploy_codex.py。历史部署默认为预检,--apply 才安装;已存在目标目录时拒绝覆盖。MCP 状态以 Codex 配置和 codex mcp list 检查结果为准。
DSH、Codex:ZoomEye 生命周期(2026-09-18)#
ZoomEye 曾短暂加入 DSH 与 Codex,之后调整路由并从相关客户端移除;最终未保留为活动来源。
- 初次加入时:DSH 服务位于
~/.dsh/mcp-servers/zoomeye/并注册到激活 profile;Codex 服务位于~/.codex/mcp-servers/zoomeye/并注册到~/.codex/config.toml。两处.env仅含空ZOOMEYE_API_KEY=模板。 - 路由调整时:曾从 Quake → Netlas → FOFA → ZoomEye 改为 Quake → ZoomEye → Netlas → FOFA,并同步搜索规则与技能副本。
- 移除时:DSH profile 中的
mcp-src-zoomeye行及服务目录已移除;Codex 的mcp_servers.zoomeye及服务目录已移除。项目源恢复 Quake → Netlas → FOFA。 - 验证:移除后的测试 26 项通过;Quake、Netlas、FOFA MCP 握手及 DSH、Codex 配置解析通过。
相关备份分别位于 ~/.dsh/backups/zoomeye-*、~/.codex/backups/zoomeye-*;完整回滚材料位于 .deploy/remove-zoomeye-20260918-224623-443900/。