Skip to main content
Glama
CanaryGuard

CanaryGuard

by ddtdas

🛡️ 金丝雀蜜罐 · CanaryGuard AntiFraud

一句话定位:面向普通用户(个人第一人称)的反诈工具——把坏人的诈骗套路降维成五个可执行环节(蜜饵诱捕 → 话术识别 → 账号速查 → 五级分级 → 证据案例),只做侦查取证与分级提醒,不做任何处置执法。

双形态:① 独立软件(FastAPI 主控 + WebUI 管理台 + 知乎通道);② MCP Server(stdio/HTTP 双传输,dsh / Claude Code / Codex 等 agent 直接调用)。 版本:v1.0.0 | 仓库:C:\Users\Administrator\Desktop\知乎黑客松\金丝雀蜜罐 | 技术方案蓝本:执行方案_反诈蜜罐\01_蜜罐反诈V2_双形态技术方案与实施计划.md


目录


Related MCP server: Advanced Fraud Detection MCP

⚠️ 合规声明(必读)

本项目是社区成员个人开发的第一人称反诈工具,不是知乎、公安机关、反诈中心或任何官方机构发布的软件;也不是官方 API 的客户端,与知乎官方无任何合作关系。

使用本项目即表示你理解并同意以下边界(对应主方案 §11 安全合规清单):

  1. 非官方工具:项目不冒充任何官方身份,输出物中不会伪造 96110/平台官方名义;如被要求"官方核实"请一律通过官方渠道。

  2. 只侦查取证,不处置执法:系统只做数据采集(只读自有/公开信息)、话术判定、分级提醒、证据包与举报模板生成;不做冻结、拦截、封锁、点名曝光、人肉、诱导转账或任何执法/处置动作。

  3. 处置权归官方:举报与处置一律走官方通道——96110(反诈专线)/ 国家反诈中心 APP / 知乎平台举报。本工具生成的是给官方通道使用的材料,不是处置本身。

  4. HITL 红线(人类在环):系统永不自动发布——蜜饵只产草稿不自动部署,举报只出模板不自动提交;任何对外动作必须由你本人在知乎/官方渠道手动完成。

  5. 数据最小化:只采集完成反诈侦查所需的最少信息(自有账号数据/公开信号);cookie 加密存储、明文不回显;案例库强制脱敏(姓名/手机号/身份证号全抹)后才会入库。

  6. 遵守平台与服务条款:使用须遵守知乎服务条款、反爬政策与《中华人民共和国个人信息保护法》;不扫描手机号/定位/关注图谱等越界数据,访问频率受全局令牌桶限制。

  7. 无保证:本项目按"现状"提供,判定结果仅供参考,不构成法律/财务建议;因使用本项目产生的任何后果由使用者自行承担。

细节见 docs/00-项目概述.md §合规红线。


1. 这是什么 / 不是什么

是 ✅

不是 ❌

个人反诈侦查取证工具箱(第一人称)

执法/处置平台,不冻结、不拦截、不点名

蜜饵(诱饵话术)草稿生成器(HITL,只产不投)

自动发布器、自动钓鱼工具

话术识别 + 账号速查 + 五级分级提醒

官方 APP / 官方渠道的替代品

证据包(哈希链防篡改)+ 举报模板生成

自动向平台/公安提交举报的机器人

MCP 工具集,供 dsh/Claude Code/Codex 调用

面向公众的多用户 SaaS

五环降维(把复杂反诈场景拆成五个可执行环节):蜜饵踩饵(R1)→ 话术识别(R2)→ 账号速查(R3)→ 五级分级(R4)→ 证据案例(R5/R6),全流程确定性优先、人类在环。


2. 架构:双形态,同一内核

┌────────────────── 独立软件形态 ──────────────────┐   ┌──────────── MCP 形态 ────────────┐
│  WebUI (Vue3)  http://127.0.0.1:9200/ui/        │   │  dsh / Claude Code / Codex        │
│        │ (REST 客户端,D1)                        │   │        │ (MCP 客户端)              │
│        ▼                                         │   │        ▼                          │
│  ┌─ FastAPI 主控 127.0.0.1:9200 ──────────────┐  │   │  mcp/server.py(纯透传代理,无     │
│  │ app/api/*       认证/蜜饵/话术/账号/分级/    │  │   │  业务逻辑;55 个 MCP 工具透传 101  │
│  │                证据/案例/知乎通道/告警/系统  │  │   │  REST 端点(101 paths,httpx 透传)│
│  │ app/services/*  zhihu_bridge · speech_engine│  │   │  env: AF_MASTER_URL / AF_API_KEY  │
│  │                · trap_engine · llm_provider │  │   └───────────────────────────────┘
│  │                · grading · evidence · cases │  │
│  │ SQLite (data/af.db) · 降级链(LLM→规则)     │  │
│  └─────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────┘
  • D1 铁律:WebUI、MCP、curl 全部是主控 REST API 的客户端,业务逻辑只在主控一份。MCP 是"透传代理"不是第二套实现——独立可用和 agent 可用天然一致。

  • 降级链(D5):LLM 不可用 → 规则 + ML(若有)→ 纯规则词库,系统不瘫;LLM 未配置时主控照常启动(health 显示 not_configured)。

  • 认证(D6):bootstrap admin key(首次启动生成 data/bootstrap_admin_key.txt)+ 敏感操作 confirm+reason 闸控。


3. 功能主线 R1–R6

环

主线

实现

关键 DoD 证据

R1

蜜饵诱捕

trap_engine.py:草稿生成(指纹 UUID + 伪装度校验)→ deployed → monitored → hit → retired;踩饵检测(SimHash 预筛 + 改写归一化;embedding 精排为可选扩展,P3-1);命中即退役并联动检测升级 L5(R1 修复:trap_hit_escalated 事件)

改写 5-10 字仍召回;命中即退役

R2

话术识别

speech_engine.py:规则词库预筛 →(可选 LLM 复核)→ judge 置信度;/scan/text

10 条已知话术 100% 命中;正常语料 0 误报

R3

账号速查

account_intel.py:公开信号评分 + 踩饵记录 + 共现团伙提示

只用公开信号(私有信号白名单丢弃)

R4

五级分级

grading.py:话术/踩饵/账号信号融合 → L1–L5;L3+ 才推告警

分级可解释(证据链);≤L3 无正式报告

R5

证据包

evidence.py:截图/哈希链/时间戳/冻结/导出/举报模板(96110/平台/辟谣)

冻结后哈希不可变(篡改即败)

R6

案例库

desensitize.py + cases.py:正则+LLM 双层脱敏 → 脱敏案例入库/查询/骗术图谱

强制脱敏;含敏感信息拒绝入库

P19

反钓鱼伪装

cover.py:伪装身份档案(parent/layer 嵌套 + 假信息字段)→ 主动暴露(HITL 脱敏清单)→ 骗子接触登记(脱敏落库 + IOC 掩码 + 同号二次锁定 escalated)→ 伪装地图

全部端点 require_admin;toggle/delete confirm+reason 审计;明文不落库


4. 快速开始(5 分钟)

4.1 前置条件

  • Windows(本说明)或 Linux/macOS;Python 3.11+(开发环境 3.12.10 验证)

  • Node.js 18+(仅 WebUI 构建需要;不构建可直接用 webui/dist/ 现成产物)

4.2 安装

:: ① 创建虚拟环境并装依赖
cd /d C:\Users\Administrator\Desktop\知乎黑客松\金丝雀蜜罐
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt

:: ② (可选)构建 WebUI 生产包(已有 webui/dist/ 可跳过)
cd webui
npm install
npm run build
cd ..

4.3 启动主控(独立软件形态)

:: 方式一:一键脚本 start.bat(cmd,纯 ASCII、任意代码页可靠运行,建议)
start.bat

:: 方式二:一键脚本 start.ps1(PowerShell 版,中文提示,UTF-8)
powershell -ExecutionPolicy Bypass -File start.ps1

:: 方式三:手动(不经过一键脚本)
.venv\Scripts\python.exe -m app.run --host 127.0.0.1 --port 9200

start.bat 三态:① 主控未运行 → 新窗口启动 + 健康探测(20s)→ 自动打开浏览器到 http://127.0.0.1:9200/ui/;② 已运行 → 不重复启动,只多开一个浏览器标签页;③ 健康 探测失败 → 提示查看主控窗口日志,不静默退出。

R1 修复(P1-5):start.bat / start.ps1 增加单实例互斥——按 9200 监听 PID 检测已运行实例, 并清理命令行含 app.run --port 9200 但非监听 PID、非监听父进程的僵尸实例(保护 venv 重定向 父进程,CIM 不可用时跳过清理、绝不阻塞启动)。 R3 修复(P3-5):僵尸匹配精确为 --port 9200(start.bat 原 -match '9200' 过宽);两脚本启动后 等待 ~2s 复核端口归属,同秒双启动中落败进程被清理,收敛为单实例。

配套脚本:stop.bat(按 PID 停止主控及其子进程树)、open-console.bat(打开项目 命令行:自动 cd 到项目根 + 激活 venv + 常用命令提示,窗口保持)。

首次启动自动完成:建 data/ 目录 → 生成 admin key → 幂等建表(24 张表,含 P19 反钓鱼伪装)→ 种子话术词库。

4.4 登录:本地打开即用,无需手工配 key

推荐路径:start.bat → 浏览器自动打开 /ui/ → 登录页点"一键登录(本机)"按钮—— WebUI 调用 POST /api/v1/auth/local-login(仅本机回环可调)直接拿到 admin key 完成登录, 无需读文件、无需配环境变量。

需要手动拿 key 时:

:: admin key 在 data/bootstrap_admin_key.txt(格式 af_admin_xxxxxxxx)
type data\bootstrap_admin_key.txt

:: 或本机命令行直接取(仅回环可调)
curl -X POST http://127.0.0.1:9200/api/v1/auth/local-login

设置页(本机)可查看当前 key(GET /api/v1/auth/current-key)与重置 key (POST /api/v1/auth/reset-key:confirm=true + reason≥20 字,写 GateLog 审计)。

入口

地址

说明

WebUI 管理台

http://127.0.0.1:9200/ui/

登录页支持一键登录(本机)按钮(免输 key,仅本机生效)或粘贴 admin key;进入仪表盘/蜜饵/话术检测/账号/证据/案例/伪装账号等 25 页面路由(含 /cover)(凭据会话级存储,关闭浏览器即失效;顶栏脱敏显示,点击可复制)

Swagger UI

http://127.0.0.1:9200/docs

交互式 API 文档

OpenAPI JSON

http://127.0.0.1:9200/openapi.json

机器可读(交付副本 docs/openapi.json)

健康检查

http://127.0.0.1:9200/api/v1/system/health

四灯:主控/DB/LLM/知乎通道

示例(curl):

# 健康
curl http://127.0.0.1:9200/api/v1/system/health

# 话术检测(无需 key)
curl -X POST http://127.0.0.1:9200/api/v1/scan/text \
  -H "Content-Type: application/json" \
  -d '{"text":"杀猪盘带你投资稳赚不赔,加老师微信"}'

# 受保护端点(需 key)
curl http://127.0.0.1:9200/api/v1/system/stats -H "X-API-Key: af_admin_xxxxxxxx"

4.5 MCP 接入(agent 形态)

见 §6 MCP 接入 与 docs/06-MCP集成.md。

详细步骤见 docs/01-快速开始.md、docs/03-部署.md。


5. API 摘要

统一前缀 /api/v1;响应统一封包:成功 {ok:true, data},失败 {ok:false, error:{code, message}}。 认证:X-API-Key 请求头(或 Authorization: Bearer),admin key 见 data/bootstrap_admin_key.txt。

分组

端点

说明

系统

GET /system/health、GET /system/stats 🔒、GET /system/embedded-dsh 🔒、GET /system/audit-verify 🔒

四灯健康 / 运行统计 / 内嵌 DSH 实例状态 / 审计哈希链自校验

认证

POST /auth/bootstrap-info、POST /auth/local-login(仅回环)、GET /auth/current-key(仅回环)、POST /auth/reset-key(仅回环,confirm+reason)

bootstrap 信息 / 本机一键登录 / 查看、重置 key

蜜饵 R1

`GET

POST /traps(写 🔒)、POST /traps/generate-draft 🔒、POST /traps/{id}/deploy

话术 R2

POST /scan/text、GET /scan/hits、POST /scan/inbox 🔒、GET /scan/inbox 🔒、POST /zhihu/import 🔒

单条判定 / 历史命中 / inbox 批量消费 pending(读取含原文需认证) / CH-D 手动导入

账号 R3

POST /accounts/check、GET /accounts/{url_name}、GET /accounts/{id}/timeline

绿黄红速查 / 画像 / 时间线

分级 R4

GET /grading/levels、GET /grading/explain/{id}

级别定义 / 可解释证据链

证据 R5

POST /evidence/build 🔒、GET /evidence/{id} 🔒、POST /evidence/{id}/freeze 🔒、GET /evidence/{id}/export 🔒、GET /evidence/{id}/report-template

构建/查看/冻结/导出/举报模板

案例 R6

GET /cases、POST /cases/publish 🔒(脱敏前置)、GET /cases/graph

查询 / 脱敏入库 / 骗术图谱

事件

GET /events 🔒、GET /events/{id} 🔒

事件流(分页/kind 过滤)

配置

GET /config、PUT /config 🔒(confirm+reason 闸控)

合成配置(密钥屏蔽)/ 敏感更新(gate_logs 审计)

知乎

GET /zhihu/channels、`POST /zhihu/channels/{id}/login

verify、GET /zhihu/status、POST /zhihu/import`

告警

GET /alerts 🔒、POST /alerts/{id}/read 🔒

L3+ 告警 / 已读

账号桥接 P9

GET /account-bridges 🔒、GET /account-bridges/{platform} 🔒、PUT /account-bridges/{platform}/config 🔒、`POST /account-bridges/{platform}/test

ingest 🔒、GET /account-bridges/{platform}/agent-import 🔒、DELETE /account-bridges/{platform}` 🔒

采集矩阵 P10

`GET

POST /collector/matrix 🔒、PUT

供应链 P10

POST /supply-chain/query 🔒、GET /supply-chain/results 🔒、GET /supply-chain/results/{name} 🔒

反查起链(DNS/相似域)/ agent workflow 报告列表/详情

聊天导入 P11

GET /chat-import/candidates 🔒、POST /chat-import/scan 🔒、POST /chat-import/import 🔒、POST /chat-import/import-file 🔒、DELETE /chat-import/imported 🔒

聊天记录候选 / 扫描 / 导入(含文件)/ 清空已导入

人设 P12

POST /persona/generate 🔒、POST /persona/schedule 🔒、GET /persona/schedules 🔒、`POST /persona/schedules/{id}/pause

resume 🔒、POST /persona/publish-now 🔒、GET /persona/posts 🔒、GET

安全运营

POST /soc-lib/query 🔒、POST /soc-lib/analyze/{det_id} 🔒、GET /soc-lib/status 🔒

SOC-Lib 安全运营词库查询 / 案件分析 / 状态

检测详情

GET /detections/{det_id}/full 🔒、GET /detections/{det_id}/platform-link 🔒

单条检测完整证据链 / 平台链接

反钓鱼伪装 P19

`POST

GET /cover/identities 🔒、POST /cover/identities/{id}/toggle 🔒、DELETE /cover/identities/{id} 🔒(confirm+reason)、POST /cover/identities/{id}/expose 🔒、POST /cover/contact 🔒、GET /cover/contacts 🔒、GET /cover/map` 🔒

🔒 = 需 admin key(仅回环端点单独注明)。完整结构见 docs/openapi.json(101 paths / 111 operations)与 docs/02-API.md。


6. MCP 接入(agent 形态)

MCP Server = 主控 REST API 的纯透传代理(mcp/server.py,无业务逻辑)。55 个 MCP 工具(af_ 前缀)透传主控 101 个 REST 端点中已映射的 54 个(cover 反钓鱼伪装端点与 persona 等一致未映射 MCP 工具,仅 REST/WebUI 可用):af_health / af_scan_text / af_list_traps / af_generate_trap_draft / af_build_evidence / af_publish_case …(完整清单见 docs/06-MCP集成.md §3)

6.1 接入配置(dsh / Claude Code / Codex 通用 mcpServers 格式)

复制以下 JSON,替换占位路径为你的真实路径:

{
  "mcpServers": {
    "af-honeypot": {
      "command": "<项目根目录>\\.venv\\Scripts\\python.exe",
      "args": ["<项目根目录>\\mcp\\server.py"],
      "env": {
        "AF_MASTER_URL": "http://127.0.0.1:9200",
        "AF_API_KEY": "<admin_key>"
      }
    }
  }
}

占位符替换规则(真实路径 = C:\Users\Administrator\Desktop\知乎黑客松\金丝雀蜜罐):

占位符

替换为(Windows 示例)

说明

<项目根目录>

C:\Users\Administrator\Desktop\知乎黑客松\金丝雀蜜罐

JSON 中反斜杠需转义为 \\(双反斜杠)

<admin_key>

data\bootstrap_admin_key.txt 内容(af_admin_xxxxxxxx)

主控 admin key,经 X-API-Key 透传

  • 本机自动生成:接入后调用工具 af_register_agent 即可返回带真实路径的完整配置 JSON,免手工替换。

  • streamable-http 方式:另开终端 python mcp\server.py --http --port 9201,客户端连接 http://127.0.0.1:9201/mcp。

  • 验证三连:接入后依次调用 af_health → af_scan_text(传一句反诈话术)→ af_list_traps。

6.2 MCP 挂载要点(排障)

  • 项目内 mcp/ 目录刻意不建 __init__.py(命名空间段),避免遮蔽官方 mcp SDK 包——请勿添加该文件。

  • 工具清单 / 敏感操作闸控 / HITL 约定见 docs/06-MCP集成.md。

6.3 敏感操作闸控(agent 调用前置条件)

以下 MCP 工具对应主控的敏感写操作,必须携带 confirm=true 且 reason≥20 字说明,否则被主控强制拒绝(403 confirm_required / 422 reason_too_short),成功操作会写入 gate_logs 哈希链审计:

工具

对应端点

说明

af_retire_trap

POST /traps/{id}/retire 🔒

退饵(含 confirm+reason 闸控)

af_freeze_evidence

POST /evidence/{id}/freeze 🔒

冻结证据包(含 confirm+reason 闸控;二次冻结 409 already_frozen)

af_publish_case

POST /cases/publish 🔒

案例入库发布(脱敏前置 + confirm+reason 闸控;同检测重复发布:同载荷幂等返回、异载荷 409 case_exists)

af_config_update

PUT /config 🔒

敏感配置更新(confirm+reason + GateLog 审计)

调用示例:af_publish_case(det_id=1, redacted_payload="…", confirm=true, reason="该案例已完成脱敏,申请入库备查")。 认证(D6):以上写操作与 GET /system/stats、POST /zhihu/channels/{id}/login|verify、POST /zhihu/import、POST /scan/inbox、GET /scan/inbox、POST /evidence/build、POST /evidence/{id}/freeze、GET /evidence/{id}/export、/account-bridges/*、/collector/*、/supply-chain/*、/system/embedded-dsh 均需 admin key(X-API-Key 透传,MCP 端经 AF_API_KEY 注入)。


7. 目录结构

金丝雀蜜罐/
├── app/                 # FastAPI 主控(唯一业务内核,D1)
│   ├── main.py run.py config.py db.py deps.py utils.py
│   ├── api/             # auth traps scan accounts grading evidence cases zhihu alerts system
│   ├── models/          # 24 张表(幂等 ensure_schema,含 P19 反钓鱼伪装)
│   └── services/        # zhihu_bridge speech_engine trap_engine llm_provider grading
│                        # account_intel evidence desensitize cases alerting
├── mcp/server.py        # MCP 透传代理(stdio + --http;55 工具)
├── webui/               # Vue3 + Vite + Element Plus + ECharts(25 路由 / 25 视图,含 /cover)
│   └── dist/            # 生产构建(主控 /ui/ 静态托管)
├── docs/                # 文档索引(00-项目概述 01-快速开始 02-API 03-部署 04-知乎通道 05-WebUI 06-MCP集成 07-测试)
├── data/                # 运行时:af.db · bootstrap_admin_key.txt · secret.key(勿提交)
├── scripts/             # export_openapi.py + cleanup_duplicates.py(存量去重清洗)+ 各阶段检查脚本
├── tests/               # pytest(479 用例)+ TEST_REPORT.md / FULL_TEST_REPORT.md
├── requirements.txt · pytest.ini · start.bat · .env.example
├── VERSION · CHANGELOG.md · README.md

8. 测试与质量

  • 全量测试:pytest -q(项目根)→ 479 passed(32 个测试文件,P0–P19 全量 + 桥接/采集/供应链/聊天导入/人设/话术库/知识库/反钓鱼伪装 + MCP 55 工具透传 + 安全与工程修复用例 + 严格验收 R1/R2/R3 修复回归 test_r6_r1fixes/test_r7_r2fixes/test_r8_r3fixes + P19 专项 test_p19_cover,含真实主控集成)

  • 存量数据维护:scripts/cleanup_duplicates.py(幂等,--dry-run 预演;清洗重复案例/冗余证据包,冻结包永不删除;执行前自动备份到 var/backups/ 并写审计,R2 已线上执行:cases 1695→80、evidence 738→103)

  • 报告:tests/TEST_REPORT.md | OpenAPI 导出:scripts/export_openapi.py → docs/openapi.json

.venv\Scripts\python.exe -m pytest -q        # 全量
.venv\Scripts\python.exe -m pytest tests/test_mcp_mount.py -v   # MCP 专项
.venv\Scripts\python.exe scripts\export_openapi.py              # 重新导出 OpenAPI

9. 版本与变更

  • 当前版本:v1.0.0(见 VERSION、CHANGELOG.md、app/__init__.py::__version__,三者一致)

  • P19 反钓鱼伪装(/api/v1/cover + /ui/cover 伪装账号页)已随 v1.0.0 交付:全量 pytest 479 passed(2026-09-17 队C 复验,基线 462 + 新增 17)。

  • 依据《03_封装规范与版本管理.md》维护版本:内容变更 → CHANGELOG 记录 → VERSION 提升。

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides 8 financial-grade KYC identity verification tools for AI agents, including face comparison, liveness detection, document OCR, and risk media labeling.
    8
    57 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to autonomously detect scams by checking URLs, messages, ABNs, and phone numbers using Australian-specific threat intelligence and privacy-preserving techniques.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to investigate synthetic fraud cases by pulling transactions, running deterministic rules evaluations, pivoting across devices, and recording auditable case files with provenance.
    4
    MIT