JMarchiori13/discord-recon

GitHub: JMarchiori13/discord-recon

Rust 编写的 Discord OSINT 只读侦察 CLI,通过公开 API 收集邀请、服务器、Webhook、用户等情报,适用于授权安全研究。

Stars: 0 | Forks: 0

# discord-recon **使用 Rust 编写的 Discord OSINT 侦察 CLI —— 纯只读,仅限公共/授权 API 接口。** [![MITRE ATT&CK T1593](https://img.shields.io/badge/MITRE%20ATT%26CK-T1593%20Social%20Media-red)](https://attack.mitre.org/techniques/T1593/) [![MITRE ATT&CK T1589](https://img.shields.io/badge/MITRE%20ATT%26CK-T1589%20Identity-red)](https://attack.mitre.org/techniques/T1589/) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/JMarchiori13/discord-recon/actions/workflows/ci.yml) [![Rust](https://img.shields.io/badge/rust-1.95%2B-orange?logo=rust)](https://www.rust-lang.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) ## 演示 ``` $ discord-recon invite discord.gg/discord-developers Invite intelligence ------------------- Field Value ------------------ ------------------------------------------------------------- Guild Discord Developers (613425648685547541) Approx. members 294043 Approx. online 58212 Verification level 3 — High (member >10 min) Boost tier 3 — Level 3 (61 boosts) ``` ## 概述 `discord-recon` 自动化执行 Discord OSINT 中被动、只读的部分, 适用于授权的测试和研究:将公开邀请解析为 guild 情报, 将 snowflake 解码为创建时间戳,读取 公开的 guild widget 和 webhook 元数据,并且(使用你自己的 bot token) 丰富用户资料。它对应 MITRE ATT&CK **T1593(搜索公开 网站/域名:社交媒体)** 和 **T1589(收集受害者身份 信息)**。 ## 两种认证级别 | 级别 | 方式 | 模块 | |------|-----|---------| | **免密钥** | 开箱即用 —— 仅限公共端点 | `invite`, `guild`, `snowflake`, `webhook`, `full` | | **Bot token** | `export DISCORD_RECON_BOT_TOKEN=...` —— 来自 [开发者门户](https://discord.com/developers/applications) 的你自己的 bot(New Application → Bot → Reset Token),仅限只读端点 | 增加 `user` | token 仅从环境中读取,绝不记录到日志,绝不写入到 导出文件中。**切勿使用用户 token** —— 那将是一个 selfbot(违反 ToS); 本工具不接受用户 token。 ## 功能 - 📨 **邀请情报**(免密钥)—— guild 名称/ID、频道、大致的成员/在线人数、邀请者(公开时)、过期时间、NSFW 标志、验证等级、Boost 等级、特性 - 🏰 **Guild widget**(免密钥)—— 名称、即时邀请、频道、带有状态/活动的在线成员;对“widget 已禁用”(50004) 进行平滑处理 - ❄️ **Snowflake 解码**(免密钥,离线)—— UTC 时间戳 + 相对存在时间、worker/process/increment 位;支持批量和 stdin - 🪝 **Webhook 元数据**(免密钥)—— 名称、头像、guild/频道 ID、创建者应用。仅限元数据 —— **绝不进行发送操作** - 👤 **用户资料**(bot-token 级别)—— 用户名、全局名称、头像/横幅 URL、强调色、解码为徽章的 `public_flags` - 🧠 **智能 `full` 编排器** —— 自动检测邀请、snowflake 还是 webhook,并链接适用的模块 - 📤 **支持 JSON/CSV 导出、`--stdout` JSONL 模式、`-` stdin 批量目标** - 🐢 **礼貌设计** —— 1 请求/秒 限速,结合 `Retry-After` 处理 Discord 429、超时机制、重试机制 ## 安装 ``` # from source cargo install --git https://github.com/JMarchiori13/discord-recon # 或本地构建 git clone https://github.com/JMarchiori13/discord-recon.git cd discord-recon cargo build --release ``` 适用于 Windows、Linux 和 macOS 的预编译二进制文件(以及 sha256 校验和)已 附加到每个 [GitHub Release](https://github.com/JMarchiori13/discord-recon/releases) 中。 ## 使用方法 ``` # KEYLESS tier discord-recon invite discord.gg/discord-developers # or just: invite discord-developers discord-recon guild 613425648685547541 # needs widget enabled on the server discord-recon snowflake 80351110224678912 175928847299117063 discord-recon webhook https://discord.com/api/webhooks// discord-recon full discord.gg/discord-developers # auto-detect & chain # BOT-TOKEN tier export DISCORD_RECON_BOT_TOKEN="your-bot-token" discord-recon user 80351110224678912 # Composability discord-recon snowflake 80351110224678912 --stdout | jq . cat ids.txt | discord-recon snowflake - ``` 全局选项: | 选项 | 默认值 | 描述 | |--------|---------|-------------| | `--rate ` | `1.0` | 礼貌限速(请求/秒) | | `--timeout ` | `15` | 单次请求超时时间(秒) | | `--retries ` | `2` | 首次尝试后的单次请求重试次数 | | `--json ` | — | 将结果导出为 JSON | | `--csv ` | — | 将结果导出为 CSV | | `--stdout` | — | 在 stdout 输出 JSONL;横幅/日志移至 stderr | | `-q, --quiet` | — | 隐藏授权横幅 | ## 模块与 ATT&CK 映射 | 模块 | 级别 | 来源 | ATT&CK | |--------|------|--------|--------| | `invite` | 免密钥 | `GET /api/v10/invites/{code}?with_counts` | T1593.001 — 社交媒体 | | `guild` | 免密钥 | `GET /api/v10/guilds/{id}/widget.json` | T1593.001 — 社交媒体 | | `snowflake` | 免密钥 | 离线解码(Discord epoch 数学计算) | T1589 / T1593 | | `webhook` | 免密钥 | `GET /api/webhooks/{id}/{token}`(只读) | T1593 | | `user` | bot token | `GET /api/v10/users/{id}` | T1589.001 — 凭据/身份 | | `full` | 两者皆有 | 链接上述模块的编排器 | — | 有关各模块的输出字段和 限制,请参阅 [docs/modules.md](docs/modules.md);有关技术和 ToS/道德边界,请参阅 [docs/methodology.md](docs/methodology.md);有关安全的测试值,请参阅 [docs/lab.md](docs/lab.md)。 ## 路线图 - [ ] Guild 发现研究(disboard/top.gg 公开列表分析) - [ ] 邀请分析与追踪(随时间变化的计数增量、Vanity 映射) - [ ] Discord OPSEC 技术指南(文档) - [ ] 从公开数据推断徽章/标志历史 - [ ] telegram-recon —— 姊妹工具构想(相同的剧本,Telegram 公开接口) ## 项目结构 ``` discord-recon/ ├── Cargo.toml ├── .github/workflows/ │ ├── ci.yml # fmt / clippy -D warnings / test / build │ └── release.yml # tag v* → win/linux/mac binaries + checksums ├── src/ │ ├── main.rs # clap CLI: invite/guild/snowflake/webhook/user/full │ ├── http.rs # shared client: UA rotation, 1 req/s, 429 Retry-After │ ├── output.rs # JSON + CSV + JSONL export, console tables │ └── modules/ │ ├── api.rs # Discord error-shape handling (10006/50004/401) │ ├── invite.rs # keyless invite intelligence │ ├── guild.rs # keyless guild widget │ ├── snowflake.rs # offline snowflake decoder │ ├── webhook.rs # keyless webhook metadata (never posts) │ ├── user.rs # bot-token user profiles + flag decoding │ └── full.rs # target-type detection & module chaining ├── docs/ │ ├── methodology.md # Discord OSINT tradecraft + ToS/ethics boundary │ ├── modules.md # per-module sources, output fields, limitations │ └── lab.md # safe test values ├── tests/cli.rs # network-free CLI integration tests ├── CONTRIBUTING.md ├── LICENSE # MIT + research-use notice └── README.md ``` ## 开发 ``` cargo fmt --check cargo clippy --all-targets -- -D warnings cargo test --release cargo build --release ``` 欢迎贡献 —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 **只读范围是不可协商的**:添加 selfbot、用户 token 自动化、抓取或批量操作的 PR 将被拒绝。 ## 许可证 [MIT](LICENSE) © 2026 JMarchiori13 —— 请参阅 LICENSE 文件中的研究使用声明和上方的免责声明。
标签:Discord, ESC4, OSINT, Rust, 可视化界面, 网络流量审计, 通知系统