JMarchiori13/discord-recon
GitHub: JMarchiori13/discord-recon
Rust 编写的 Discord OSINT 只读侦察 CLI,通过公开 API 收集邀请、服务器、Webhook、用户等情报,适用于授权安全研究。
Stars: 0 | Forks: 0
# discord-recon
**使用 Rust 编写的 Discord OSINT 侦察 CLI —— 纯只读,仅限公共/授权 API 接口。**
[](https://attack.mitre.org/techniques/T1593/)
[](https://attack.mitre.org/techniques/T1589/)
[](https://github.com/JMarchiori13/discord-recon/actions/workflows/ci.yml)
[](https://www.rust-lang.org/)
[](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, 可视化界面, 网络流量审计, 通知系统